选择只有一个值与参考值不同的数据框行

时间:2019-02-07 18:09:00

标签: r dataframe subset

我制作了一个数据帧,其中包含一组变量的所有组合,但是我只对其中这些值中只有一个与参考值集不同的行感兴趣。

因此,如果感兴趣的值是:

V1int <- 1
V2int <- 2
V3int <- 3

我的数据框是:

df<-data.frame("V1"=c(1,1,2,1), "V2"=c(2,2,2,3), "V3"=c(3,1,3,2))

然后我想要前三行(c(1,2,3),c(1,2,1)和c(2,2,3)),而不是第四行(c(1, 3,2)),因为在前三行中只有一个值不正确,而在最后一行中只有两个值不正确。

我想象必须有某种“或”语句可以生成所有合适的值组合,然后我可以将其作为数据帧的子集,但是我不确定。我有10列和40,000个值组合,因此不能完全分别指定所需值的组合。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试

df[apply(df, 1, function(x) sum(1:3  == x) >= 2), ]
#  V1 V2 V3
#1  1  2  3
#2  1  2  1
#3  2  2  3

其中1:3c(V1int, V2int, V3int)的缩写。

这个想法是将每行的元素与1:3进行比较,然后检查至少两个元素是否相同。结果是一个逻辑向量,我们将其用于子集数据。


另一个选择是

df[colSums(t(df) == 1:3) >= 2, ]

答案 1 :(得分:0)

另一个角度

样本数据

df<-data.frame("V1"=c(1,1,2,1), "V2"=c(2,2,2,3), "V3"=c(3,1,3,2))

V1int <- 1
V2int <- 2
V3int <- 3

代码

reference <- c( V1int, V2int, V3int )
df[ apply( df, 1, function(x) length( which( as.vector(x) == reference ) ) ) > 1, ]

#   V1 V2 V3
# 1  1  2  3
# 2  1  2  1
# 3  2  2  3