如何为一组列中任何一列中符合一个条件的行对数据框进行子集化?

时间:2015-05-03 16:23:21

标签: r dataframe subset

在R中,我有一个数据框(H1),每列有两列,89列有数字数据,最后一列有行(我有1000行)。

我需要选择我的任何数字列> 15的行。如果我只想按一列选择行,我可以这样做:

H1<-H2[H2[,3]>15,]

但不是所有89列中的任何一列。我试过了 -

H1<-H2[H2[,3:91]>15,]

但这只会返回一堆NAs。

2 个答案:

答案 0 :(得分:1)

使用data.table(data.frame扩展名):

library(data.table)
setDT(H1)
H1[, i := any(unlist(lapply(.SD, function(x) x>15))), seq_len(nrow(H1)), .SDcols=3:92
    ][i==TRUE
      ][,i:=NULL]

答案 1 :(得分:1)

您可以在基本R中使用rowSums来计算逻辑索引,然后按该索引对数据进行子集化。这是一个例子:

set.seed(123)
DF <- data.frame(id = sample(letters[1:3], 20, TRUE), 
                 matrix(sample(1:25, 100, TRUE), ncol = 5))

现在计算索引:

idx <- rowSums(DF[2:6] > 15) >= 1L

并使用它来对数据进行子集化:

DF[idx, ]

或两个步骤:

DF[rowSums(DF[2:6] > 15) >= 1L, ]

在这里,我使用了第2:6列。在您的数据中,您可以将其替换为3:92或您需要的数据。