【问题标题】:How to subset a data frame for rows which match one criteria in any of a group of columns?如何对与一组列中的任何一个条件匹配的行的数据框进行子集化?
【发布时间】:2015-05-04 20:56:54
【问题描述】:

在 R 中,我有一个数据框 (H1),其中包含两列来命名每一行,89 列包含数字数据,最后一列包含行均值(我有 1000 行)。

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

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

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

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

但这只会返回大量的 NA。

【问题讨论】:

  • 你在使用 R 吗?如果是这样,请使用“data.frame”标签。如果不是,请说明您使用的是哪种语言/程序。
  • 谢谢,以上修改

标签: r dataframe subset


【解决方案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]

【讨论】:

    【解决方案2】:

    您可以在 base 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 或您需要的内容。

    【讨论】:

      猜你喜欢
      • 2022-12-14
      • 1970-01-01
      • 2015-04-24
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 2023-03-12
      • 1970-01-01
      相关资源
      最近更新 更多