首页 > 解决方案 > 如何按 ID 对特定输出进行子集列表

问题描述

如果我说我有一份使用自助餐厅的人的名单。

Fruits   ID   Date
apple    1    100510
apple    2    100710
banana   2    110710
banana   1    120910
kiwi     2    120710
apple    3    100210
kiwi     3    110810

我想选择同时使用苹果和香蕉的人以及我的新数据集来包含符合此纳入标准的人并给出:

ID
1
2

(因为只有 ID 1 和 2 在数据集中同时有苹果和香蕉)

我应该在 R 中使用什么代码?

标签: r

解决方案


在基础 R 中,您可以执行类似的操作

data.frame(ID = names(which(sapply(split(df$Fruits, df$ID), function(x) {
   "apple" %in% x & "banana" %in% x 
}))))

#>   ID
#> 1  1
#> 2  2

这将为您提供同时包含“apple”和“banana”的 ID 名称

如果您想要包含这些行的数据框的子集,您可以执行以下操作:

df[df$ID %in% names(which(sapply(split(df$Fruits, df$ID), function(x) {
   "apple" %in% x & "banana" %in% x 
}))),]

#>   Fruits ID   Date
#> 1  apple  1 100510
#> 2  apple  2 100710
#> 3 banana  2 110710
#> 4 banana  1 120910
#> 5   kiwi  2 120710

推荐阅读