如何使用三列选择行

时间:2012-07-22 13:27:10

标签: database r dataframe

我在R中有一个data.frame。我想选择在一列的三列中具有特定值的行。我有一个大数据框架,但我需要的是下面的示例:

seller<-c("Mary", "Bill", "Jeff", "Paty", "Paul", "Criss")
c1<-c(1,2,1,1,3,1)
c2<-c(1,1,1,1,2,1)
c3<-c(1,1,3,1,1,1)
data<-data.frame(seller, c1, c2, c3)

>data
       seller c1 c2 c3
   1   Mary  1  1  1
   2   Bill  2  1  1
   3   Jeff  1  1  3
   4   Paty  1  1  1
   5   Paul  3  2  1
   6   Cris  1  1  1

我想选择值大于等于2的行,如下所示:

>data
       seller c1 c2 c3
   1   Bill  2  1  1
   2   Jeff  1  1  3
   3   Paul  3  2  1

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我不知道这是否是最佳方法,但您可以使用rowSumswhich进行子集化,如下例所示:

data[which(rowSums(data[-1]) > ncol(data[-1])), ]
#   seller c1 c2 c3
# 2   Bill  2  1  1
# 3   Jeff  1  1  3
# 5   Paul  3  2  1

更直接的选择是:

data[which(apply(data[-1], 1, function(x) any(x >= 2))), ]

我使用data[-1]删除了卖家的名字(因为它们是字符串)。然后,带有apply边距的1按行应用指定的函数(边距2将按列执行相同的操作)。函数为any(x >= 2),每行返回TRUEFALSE;使用which,我们可以对返回为TRUE的行进行子集化。