【问题标题】:Removing all columns with all NAs in a data.frame without a loop in R [duplicate]在R中没有循环的情况下删除data.frame中所有NA的所有列[重复]
【发布时间】:2020-02-03 14:13:09
【问题描述】:

我想删除所有NA 的列。我有两种解决方案,如下所示,但它们都在底层使用循环结构。

我想知道是否有不需要使用...applyfor 循环的更快解决方案?

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


【解决方案1】:

类似于rowSums 用于行,我们可以使用colSums 用于列

r[, colSums(is.na(r)) != nrow(r)]

#  AA CC
#1  1  3
#2 NA NA
#3  3  5

【讨论】:

    猜你喜欢
    • 2021-02-15
    • 2018-10-21
    • 2012-11-01
    • 2015-11-05
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-22
    相关资源
    最近更新 更多