我有一个列表,其中包含不同大小的几个数据框(本例中只有2个)。
> myList
$`1`
ID values
1 1 100
2 2 200
3 3 240
4 4 403
5 5 212
6 6 432
7 7 423
8 8 123
9 9 543
10 10 982
$`2`
ID values
1 3 432
2 5 333
3 6 981
现在,我需要在任何其他数据帧中不共享ID
的数据帧中省略所有行。在此示例中,我要查找的结果是:
> myList2
$`1`
ID values
3 3 240
5 5 212
6 6 432
$`2`
ID values
1 3 432
2 5 333
3 6 981
我已尝试使用dplyr::setequal()
但最终使用FALSE: Different number of rows
。如果可能的话,我更喜欢基础解决方案。提前谢谢!
可重复的代码:
myList <- list(data.frame('ID' = c(1:10), 'values' = c(100,200,240,403,212,432,423,123,543,982)),data.frame('ID' = c(3,5,6), 'values' = c(432,333,981)))
答案 0 :(得分:3)
通过基础R的一种方法是使用Reduce(intersect, ...)
从列表中的所有数据帧中查找公共ID。然后我们使用它来索引数据框。
ind <- Reduce(intersect, lapply(myList, '[[', 1))
lapply(myList, function(i) i[i$ID %in% ind,])
#[[1]]
# ID values
#3 3 240
#5 5 212
#6 6 432
#[[2]]
# ID values
#1 3 432
#2 5 333
#3 6 981