如何选择具有特定数字序列的特定行

问题描述 投票:0回答:1

我想在数据框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的行,但不能包含任何其他数字。哪个会给我行BD。我如何在R中做到这一点?

我已经尝试过x[which(x=="1,3,4,9")],但这会考虑到顺序。

谢谢

r
1个回答
0
投票

您想要选择仅包含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)]
© www.soinside.com 2019 - 2024. All rights reserved.