我希望通过包含ID
的行来筛选数据框x
,这些行的Hour
匹配testVector
的所有值。
ID <- c('A','A','A','A','A','B','B','B','B','C','C')
Hour <- c('0','2','5','6','9','0','2','5','6','0','2')
x <- data.frame(ID, Hour)
x
ID Hour
1 A 0
2 A 2
3 A 5
4 A 6
5 A 9
6 B 0
7 B 2
8 B 5
9 B 6
10 C 0
11 C 2
testVector <- c('0','2','5')
解决方案应该生成以下数据框:
x
ID Hour
1 A 0
2 A 2
3 A 5
4 A 6
5 A 9
6 B 0
7 B 2
8 B 5
9 B 6
由于缺失了“小时”5的ID C的所有值都被删除。请注意,我希望保留与testVector匹配的ID的所有“小时”值。
最好使用dplyr来解决问题,但任何一种解决方案都欢迎。
根据其他相关问题在SO上的描述,我猜测我需要一些%in%和all的组合,但我无法完全理解它。
temp = sapply(split(x, x$ID), function(a) all(testVector %in% a$Hour)); x[temp[match(x$ID, names(temp))],]
。 - d.bfunction(a)
之后使用函数来测试testVector中的所有元素是否也在a$Hour中。我希望这样解释可以让你明白,如果还有不懂的地方,请告诉我!在我的解决方案中,我使用了另一个lapply来先获取唯一值,但这是不必要的。 - Florian