Is there a function in R to perform an exclusive full join?

Multi tool use
Multi tool use





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







0















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))









share|improve this question























  • 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


















0















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))









share|improve this question























  • 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














0












0








0








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))









share|improve this question














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






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 3 at 21:47









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



















  • 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












1 Answer
1






active

oldest

votes


















0














you need to combine two anti joins



library(dplyr)
bind_rows(
anti_join(df1, df2),
anti_join(df2, df1),
)





share|improve this answer
























    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
    });


    }
    });














    draft saved

    draft discarded


















    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









    0














    you need to combine two anti joins



    library(dplyr)
    bind_rows(
    anti_join(df1, df2),
    anti_join(df2, df1),
    )





    share|improve this answer




























      0














      you need to combine two anti joins



      library(dplyr)
      bind_rows(
      anti_join(df1, df2),
      anti_join(df2, df1),
      )





      share|improve this answer


























        0












        0








        0







        you need to combine two anti joins



        library(dplyr)
        bind_rows(
        anti_join(df1, df2),
        anti_join(df2, df1),
        )





        share|improve this answer













        you need to combine two anti joins



        library(dplyr)
        bind_rows(
        anti_join(df1, df2),
        anti_join(df2, df1),
        )






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 3 at 22:14









        ThierryThierry

        14.7k43559




        14.7k43559
































            draft saved

            draft discarded




















































            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.




            draft saved


            draft discarded














            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





















































            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
            xw3pKdxARqm,HmMdeigzSFXVqCD2wTrhw2ZaWopQJOzWzrxA9xtsWTb,foF,UgjRFAaGWZyAlxySYu8I9iFpAEL A1 DNTOmc

            Popular posts from this blog

            Monofisismo

            Angular Downloading a file using contenturl with Basic Authentication

            Olmecas