【发布时间】:2020-02-03 14:13:09
【问题描述】:
我想删除所有NA 的列。我有两种解决方案,如下所示,但它们都在底层使用循环结构。
我想知道是否有不需要使用...apply 或for 循环的更快解决方案?
PS.如果我想删除所有带有NA 的行,我可以避免像这样的循环:r[rowSums(is.na(r)) != ncol(r), ] 但类似的解决方案可以应用于列吗?
r <- data.frame(AA = c(1, NA, 3), BB = c(NA, NA, NA), CC = c(3, NA, 5) )
r[sapply(r, function(r) !all(is.na(r)))] # Solution 1
Filter(function(x) !all(is.na(x)), r) # Solution 2
【问题讨论】:
-
检查每一列以查看它是否完全由定义的
NA值组成,这意味着 R 必须在某个时候在引擎盖下迭代该列。我对您当前的解决方案没有意见。 -
@TimBiegeleisen,不一定。例如,如果我想删除所有
NA的所有行,我可以避免像这样的循环:r[rowSums(is.na(r)) != ncol(r), ]但是列呢?
标签: r function loops dataframe na