Is there a function in R to perform an exclusive full join?
![Multi tool use Multi tool use](http://sgv.ssvwv.com/sg/ssvwvcomimagb.png)
Multi tool use
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I am merging two dataframes that have some overlapping observations. These observations don't overlap on all columns so they are not identical, but they are the same on the columns I've decided are important for linking. How do I merge/join such that the matched observations are excluded?
I'm familiar with the different join functions and how to perform inner and outer joins using merge()
, but I don't see an option for excluding the rows that would constitute an inner join.
This is a similar question on the topic, Exclusive Full Join in r
but it assumes there are different columns in each dataframe that will produce NAs upon full join. How would you do it if the dataframes shared all the same columns?
The workaround I am using is to use duplicated()
from first and last to remove the rows after full joining. Is there a more elegant way to get the complement of inner join?
df_joined <- merge(df1, df2, all = TRUE)
df_joined <- subset(df_joined, !(duplicated(df_joined[
,linking_cols])==TRUE | duplicated(df_joined[ ,linking_cols], fromLast =
TRUE)==TRUE))
r join outer-join
add a comment |
I am merging two dataframes that have some overlapping observations. These observations don't overlap on all columns so they are not identical, but they are the same on the columns I've decided are important for linking. How do I merge/join such that the matched observations are excluded?
I'm familiar with the different join functions and how to perform inner and outer joins using merge()
, but I don't see an option for excluding the rows that would constitute an inner join.
This is a similar question on the topic, Exclusive Full Join in r
but it assumes there are different columns in each dataframe that will produce NAs upon full join. How would you do it if the dataframes shared all the same columns?
The workaround I am using is to use duplicated()
from first and last to remove the rows after full joining. Is there a more elegant way to get the complement of inner join?
df_joined <- merge(df1, df2, all = TRUE)
df_joined <- subset(df_joined, !(duplicated(df_joined[
,linking_cols])==TRUE | duplicated(df_joined[ ,linking_cols], fromLast =
TRUE)==TRUE))
r join outer-join
A single anti-join will remove the matched rows but also any new rows from the second dataframe. I would like to keep all the unmatched contributions from both dataframes.
– Zach S.
Jan 4 at 1:04
add a comment |
I am merging two dataframes that have some overlapping observations. These observations don't overlap on all columns so they are not identical, but they are the same on the columns I've decided are important for linking. How do I merge/join such that the matched observations are excluded?
I'm familiar with the different join functions and how to perform inner and outer joins using merge()
, but I don't see an option for excluding the rows that would constitute an inner join.
This is a similar question on the topic, Exclusive Full Join in r
but it assumes there are different columns in each dataframe that will produce NAs upon full join. How would you do it if the dataframes shared all the same columns?
The workaround I am using is to use duplicated()
from first and last to remove the rows after full joining. Is there a more elegant way to get the complement of inner join?
df_joined <- merge(df1, df2, all = TRUE)
df_joined <- subset(df_joined, !(duplicated(df_joined[
,linking_cols])==TRUE | duplicated(df_joined[ ,linking_cols], fromLast =
TRUE)==TRUE))
r join outer-join
I am merging two dataframes that have some overlapping observations. These observations don't overlap on all columns so they are not identical, but they are the same on the columns I've decided are important for linking. How do I merge/join such that the matched observations are excluded?
I'm familiar with the different join functions and how to perform inner and outer joins using merge()
, but I don't see an option for excluding the rows that would constitute an inner join.
This is a similar question on the topic, Exclusive Full Join in r
but it assumes there are different columns in each dataframe that will produce NAs upon full join. How would you do it if the dataframes shared all the same columns?
The workaround I am using is to use duplicated()
from first and last to remove the rows after full joining. Is there a more elegant way to get the complement of inner join?
df_joined <- merge(df1, df2, all = TRUE)
df_joined <- subset(df_joined, !(duplicated(df_joined[
,linking_cols])==TRUE | duplicated(df_joined[ ,linking_cols], fromLast =
TRUE)==TRUE))
r join outer-join
r join outer-join
asked Jan 3 at 21:47
![](https://lh6.googleusercontent.com/-BEVH7YSC_CE/AAAAAAAAAAI/AAAAAAAAAAA/AGDgw-iwDljR0w0EvAsi6HvF9ZxEO5u7Vw/mo/photo.jpg?sz=32)
![](https://lh6.googleusercontent.com/-BEVH7YSC_CE/AAAAAAAAAAI/AAAAAAAAAAA/AGDgw-iwDljR0w0EvAsi6HvF9ZxEO5u7Vw/mo/photo.jpg?sz=32)
Zach S.Zach S.
104
104
A single anti-join will remove the matched rows but also any new rows from the second dataframe. I would like to keep all the unmatched contributions from both dataframes.
– Zach S.
Jan 4 at 1:04
add a comment |
A single anti-join will remove the matched rows but also any new rows from the second dataframe. I would like to keep all the unmatched contributions from both dataframes.
– Zach S.
Jan 4 at 1:04
A single anti-join will remove the matched rows but also any new rows from the second dataframe. I would like to keep all the unmatched contributions from both dataframes.
– Zach S.
Jan 4 at 1:04
A single anti-join will remove the matched rows but also any new rows from the second dataframe. I would like to keep all the unmatched contributions from both dataframes.
– Zach S.
Jan 4 at 1:04
add a comment |
1 Answer
1
active
oldest
votes
you need to combine two anti joins
library(dplyr)
bind_rows(
anti_join(df1, df2),
anti_join(df2, df1),
)
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54030260%2fis-there-a-function-in-r-to-perform-an-exclusive-full-join%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
you need to combine two anti joins
library(dplyr)
bind_rows(
anti_join(df1, df2),
anti_join(df2, df1),
)
add a comment |
you need to combine two anti joins
library(dplyr)
bind_rows(
anti_join(df1, df2),
anti_join(df2, df1),
)
add a comment |
you need to combine two anti joins
library(dplyr)
bind_rows(
anti_join(df1, df2),
anti_join(df2, df1),
)
you need to combine two anti joins
library(dplyr)
bind_rows(
anti_join(df1, df2),
anti_join(df2, df1),
)
answered Jan 3 at 22:14
ThierryThierry
14.7k43559
14.7k43559
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54030260%2fis-there-a-function-in-r-to-perform-an-exclusive-full-join%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
irTlviDp24oc c8vDjowO,PG,2WOCGM RXED44RgI8eM,J1Tp49,opVGLOyveYZ,7WsX8f6OLx9C h1,ahlmhkPJ,V5 n9jhdFp
A single anti-join will remove the matched rows but also any new rows from the second dataframe. I would like to keep all the unmatched contributions from both dataframes.
– Zach S.
Jan 4 at 1:04