从另一个中减去一个数据帧

vit*_*tor 22 r

假设我有一个更大的数据帧和一个更小的数据帧.如果较小的一个包含在较大的一个内,我怎么能有:

更大 - 更小

例:

小数据框:

     ID       CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1
203079_BA_M     10       11       14         16      -9        -9
203079_BA_F      8       12       14         17      -9        -9
203080_BA_M     10       12       13         13      -9        -9
Run Code Online (Sandbox Code Playgroud)

大数据框架:

      ID      CSF1PO CSF1PO.1 D10S1248 D10S1248.1 D12S391 D12S391.1
203078_MG_M     -9       -9       15         15      18        20
203078_MG_F     -9       -9       14         15      17        19
203079_BA_M     10       11       14         16      -9        -9
203079_BA_F      8       12       14         17      -9        -9
203080_BA_M     10       12       13         13      -9        -9
203080_BA_F     10       11       14         16      -9        -9
203081_MG_M     10       12       14         16      -9        -9
203081_MG_F     11       12       15         16      -9        -9
203082_MG_M     11       11       13         15      -9        -9
203082_MG_F     11       11       13         14      -9        -9
Run Code Online (Sandbox Code Playgroud)

小数据帧对应于较大数据帧的行3,4和5.

Fer*_*aft 19

试试这个:

BigDF[ !(BigDF$ID %in% SmallDF$ID), ]
Run Code Online (Sandbox Code Playgroud)


lee*_*sej 13

在dplyr中:

library(dplyr)

setdiff(BigDF, SmallDF)
Run Code Online (Sandbox Code Playgroud)

更多信息:Hadley的dply cheatsheet:https://www.rstudio.com/wp-content/uploads/2015/02/data-wrangling-cheatsheet.pdf

简明集操作函数与示例 http://rpackages.ianhowson.com/cran/dplyr/man/setops.html(但整个数据操作语法总体来说是一个很好的资源)

虽然下面没有直接回答你的问题 - 它经常与我有关(并且非常有用)

如果您希望捕获新数据帧与同一数据帧的先前版本(在相同记录中)之间发生的新更改,您将希望使代码看起来如下所示:

setdiff(NewDF, OldDF)
Run Code Online (Sandbox Code Playgroud)