0

我在 R 中有一个 data.frame。我想选择在三列之一中具有特定值的行。我有一个大的 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

谢谢您的帮助!

4

1 回答 1

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应用指定的函数(边距将按列执行相同的操作)。函数是,它为每一行返回或;使用,我们可以对返回的行进行子集化。2any(x >= 2)TRUEFALSEwhichTRUE

于 2012-07-22T13:37:15.840 回答