我想从仅包含 NA 的 data.table 中删除行。
> tab = data.table(A = c(1, NA, 3), B = c(NA, NA, 3))
> tab
A B
1: 1 NA
2: NA NA
3: 3 3
Run Code Online (Sandbox Code Playgroud)
通常我会这样做apply(dat, 1, ...),不幸的是它不适用于 data.table ,但它使我找到了这个不雅的解决方案:
> tab[apply(as.data.frame(tab), 1, function(x) !all(is.na(x))), ]
A B
1: 1 NA
2: 3 3
Run Code Online (Sandbox Code Playgroud)
如何在不知道列名的情况下以最快的方式实现?
我们可以使用Reduce与is.na和&
tab[!Reduce(`&`, lapply(tab, is.na))]
# A B
#1: 1 NA
#2: 3 3
Run Code Online (Sandbox Code Playgroud)
或者一个紧凑但不那么有效的方法是
tab[rowSums(!is.na(tab)) != 0L]
Run Code Online (Sandbox Code Playgroud)
此外,正如@Frank 所评论的,一种基于连接的方法,
tab[!tab[NA_integer_], on = names(tab)]
Run Code Online (Sandbox Code Playgroud)