【问题标题】:Remove rows from data.table where all columns with names including "question" are NA从 data.table 中删除所有名称包括“问题”的列都是 NA 的行
【发布时间】:2019-07-18 09:08:08
【问题描述】:

我有来自调查的数据,其中任何问题的回答都被认为是有效的,无论之前或之后的问题都得到了回答。

响应的所有数据都在 data.table 中,列在名称以“问题”开头的列中

> dt.x <- data.table(
    row = 1:5,
    question_a = c(NA,NA,"A","B","C"),
    question_b = c(NA,"A","B","C","D")
)

> dt.x
   row question_a question_b
1:   1       <NA>       <NA>
2:   2       <NA>          A
3:   3          A          B
4:   4          B          C
5:   5          C          D

我的目标是删除以“问题”开头的任何列中没有数据的行,但其他列中可能有数据,例如示例中的行列。

   row question_a question_b
1:   2       <NA>          A
2:   3          A          B
3:   4          B          C
4:   5          C          D

如何在 grepping 列名时执行此操作?我正在尝试类似的东西

> dt.x[!all(is.na(get(grep("question", names(dt.x), value = T))))]
   row question_a question_b
1:   1       <NA>       <NA>
2:   2       <NA>          A
3:   3          A          B
4:   4          B          C
5:   5          C          D

但没有得到我想要的结果。

【问题讨论】:

    标签: r data.table


    【解决方案1】:

    您可以使用rowSums 并计算每行的NA 值并选择不包含所有NA 的行

    question_cols <- sum(grepl("^question", names(dt.x)))
    dt.x[rowSums(is.na(dt.x[, -1])) != question_cols, ]
    
    #   row question_a question_b
    #1:   2       <NA>          A
    #2:   3          A          B
    #3:   4          B          C
    #4:   5          C          D
    

    或使用dplyrfilter_at

    library(dplyr)
    dt.x %>%
       filter_at(vars(starts_with("question")), any_vars(!is.na(.)))
    

    【讨论】:

    • 这是我最容易理解的。将dt.x[, -1] 替换为dt.x[, -(grep("^question", names(dt.x), invert = T)), with = F] 会稍有改进。谢谢!
    【解决方案2】:

    对于您的情况,您可以简单地这样做:

    dt.x[, .SD[!all(is.na(.SD))], by = row]
    

    如果存在更多列:

    dt.x[dt.x[, !all(is.na(.SD)), by = row, .SDcols = patterns("^question")]$V1]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-16
      • 1970-01-01
      • 2018-10-21
      • 2014-12-07
      • 2023-01-30
      • 2015-05-06
      • 1970-01-01
      • 2022-01-12
      相关资源
      最近更新 更多