首页 > 解决方案 > 为完整案例设置阈值以从 R 中的多个列中删除 NA

问题描述

对此可能有一个简单的答案,但我无法使其发挥作用。我有一个如下所示的数据表:

df <- data.table(t = c(1, 2, 3), a = c(NA, NA, 4), b = c(NA, 4, NA), c = c(NA, 4, NA))

如何仅删除除“t”之外的所有列都具有 NA 的行。由于我的数据文件很大,所以它应该很快,所以我特别想用 complete.cases 来做。我还没有找到解决这个问题的方法。

结果应该是这样的

dfRes <- data.table(t = c(2, 3), a = c(NA, 4), b = c(4, NA), c = c(4, NA))

标签: rdata.tablena

解决方案


我们可以rowSums在除 之外的列上使用"t"

library(data.table)

cols <- which(names(df) != 't')
df[rowSums(!is.na(df[, ..cols])) > 0, ]

#   t  a  b  c
#1: 2 NA  4  4
#2: 3  4 NA NA

推荐阅读