我在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
感谢您的帮助!
答案 0 :(得分:1)
我不知道这是否是最佳方法,但您可以使用rowSums
和which
进行子集化,如下例所示:
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)
,每行返回TRUE
或FALSE
;使用which
,我们可以对返回为TRUE
的行进行子集化。