【问题标题】:Subtracting a smaller data frame from a larger data-frame in R without unique row ID从没有唯一行 ID 的 R 中的较大数据帧中减去较小的数据帧
【发布时间】:2016-11-28 16:06:46
【问题描述】:

我在 R 中有两个数据框:Large 和 Small。较小的包含在较大的中。重要的是,任一数据框中的每一行都没有唯一标识符。我如何获得以下内容:

大 - 小 [大减小]

小数据框(SmallDF):

     ID       CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1
203079           10       11       14         16      -9        -9
203079            8       12       14         17      -9        -9
203080           10       12       13         13      -9        -9

大数据框(BigDF):

      ID      CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1
203078          -9       -9       15         15      18        20
203078          -9       -9       14         15      17        19
203079          10       11       14         16      -9        -9
203079           8       12       14         17      -9        -9
203080          10       12       13         13      -9        -9
203080          10       11       14         16      -9        -9
203081          10       12       14         16      -9        -9
203081          11       12       15         16      -9        -9
203082          11       11       13         15      -9        -9
203082          11       11       13         14      -9        -9    

小数据框对应大数据框的第 3、4 和 5 行。

我已经尝试了以下方法。

BigDF[ !(BigDF$ID %in% SmallDF$ID), ] 

这不起作用,因为任一行中都有唯一标识符。我得到的输出与 BigDF 完全相同。

我也尝试了以下方法。

library(dplyr)
setdiff(BigDF, SmallDF)

我收到的输出与 BigDF 完全相同。

任何帮助将不胜感激!谢谢。

【问题讨论】:

    标签: r


    【解决方案1】:
    library(dplyr)
    anti_join(BigDF, SmallDF)
    

    这相当于:

    anti_join(BigDF, SmallDF, by=c("ID", "CSF1PO", "CSF1PO.1", "D10S1248", "D10S1248.1", "D12S391", "D12S391.1"))
    

    显然,如果您有两个唯一标识一行的变量,您可以在传递给by 的向量中仅指定这些变量:

    anti_join(BigDF, SmallDF, by=c("ID", "CSF1PO.1"))
    

    【讨论】:

      【解决方案2】:

      使用基础 R:

      BigDF[-which(duplicated(rbind(BigDF, SmallDF), fromLast = TRUE)),]
      

      有输出:

             ID CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1
      1  203078     -9       -9       15         15      18        20
      2  203078     -9       -9       14         15      17        19
      6  203080     10       11       14         16      -9        -9
      7  203081     10       12       14         16      -9        -9
      8  203081     11       12       15         16      -9        -9
      9  203082     11       11       13         15      -9        -9
      10 203082     11       11       13         14      -9        -9
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-29
        • 2019-07-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-05-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多