我有一个数据集,其中包含两列中的值列表,并且我希望能够对每一行的列表进行相互比较。例如,我有 3 个组,其中某些数字是预期的,而其他数字是观察到的。我想将“观察到”列与“预期”列进行比较,以查看哪些数字是预期的,但未观察到。
团体 | 预期的 | 观察到的 |
---|---|---|
A | 4:8 | c(4,5,7) |
乙 | 7:12 | c(7,8,9,10,12) |
C | 6:10 | c(6,8,10) |
我想要一个名为 Missing 的额外列,其中包含预期值但未观察到的所有值。
团体 | 预期的 | 观察到的 | 丢失的 |
---|---|---|---|
A | 4:8 | c(4,5,7) | c(6, 8) |
乙 | 7:12 | c(7,8,9,10,12) | 11 |
C | 6:11 | c(6,8,11) | c(7, 9, 10) |
我尝试使用 setdiff() 和 base R,因为它可以找到两个列表之间的不同值。但是,我无法让它以比较每行列表的方式工作。
df$Missing <- setdiff(df$Expected, df$Observed)
df$Missing <- df$Expected[!(df$Expected %in% df$Observed)]
这两个选项都会生成完整的预期列表。这是我得到的输出:
团体 | 预期的 | 观察到的 | 丢失的 |
---|---|---|---|
A | 4:8 | c(4,5,7) | 4:8 |
乙 | 7:12 | c(7,8,9,10,12) | 7:12 |
C | 6:11 | c(6,8,11) | 6:11 |
有什么方法可以比较每组的两个列表(观察值与预期值),以便我可以看到每组缺少哪些值?预先感谢您的任何帮助!
既然你有列表,请
Map
使用setdiff
-数据
如果您以可重现的格式提供数据,则更容易提供帮助。
使用
data.table
反连接:通过
data.table
分组操作:数据:
在更大的数据集上进行基准测试:
看起来
%!in%
是迄今为止的赢家。受到@RonakShah 的启发,
tidyverse
方法