选择数据帧的行,其中只有一个值从参考不同

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

我已经在那里有一组变量的所有组合一个数据帧,但我只在只有这些值中的一个设定值的参考不同的行感兴趣。

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

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 )),因为只有一个值出来的地方在前三排,但最终排在三分之二的地方。

我想一定有某种“或”语句,这样可以产生价值,我可以那么子集在数据帧的所有合适的组合,但我不知道。我有十列和值40000种组合,因此,单独指定所需的值的组合是不完全可能的。

谢谢!

r dataframe subset
2个回答
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:3是短期的c(V1int, V2int, V3int)

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


另一种选择是

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

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