我想在数据框X中选择仅包含某些数字的某些行(顺序无关紧要),而不是其他行:
A 1, 2, 3, 4, 9, 11, 27
B 1, 3, 4, 9
C 2, 5, 8, 12, 42, 45
D 3, 1, 9, 4
在这种情况下,我想以任何顺序选择带有数字1,3,4,9
的行,但不能包含任何其他数字。哪个会给我行B
和D
。我如何在R中做到这一点?
我已经尝试过x[which(x=="1,3,4,9")]
,但这会考虑到顺序。
谢谢
您想要选择仅包含1,3,4,9的列表元素吗?我假设x是一个列表
x <- list(
'A' = c(1, 2, 3, 4, 9, 11, 27),
'B'=c( 1, 3, 4, 9),
'C'=c( 2, 5, 8, 12, 42, 45),
'D'=c( 3, 1, 9, 4 )
)
试试Filter(function(x) length(setdiff(x, c(1,3,4,9))) == 0, x)
它将处理任意数量的重复并选择包含1,3,4和9子集的x
或
Filter(function(x) setequal(x, c(1,3,4,9)), x)
它也可以处理任意数量的重复,但会拒绝不包含所有4个数字的集合。
您可以使用数组索引:
x[sapply(x, setdiff, c(1,3,4,9))]
。
您还可以查看%in%
运算符,这是一个匹配的特殊调用:!any(is.na(match(x, c(1,3,4,9)))
。
x[sapply(lapply(x, `%in%`, c(1,3,4,9)), all)]