我已经在那里有一组变量的所有组合一个数据帧,但我只在只有这些值中的一个设定值的参考不同的行感兴趣。
因此,如果感兴趣的值是:
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种组合,因此,单独指定所需的值的组合是不完全可能的。
谢谢!
你可以试试
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, ]
另一个角度
样本数据
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