【问题标题】:Finding number of NAs across all columns, row by row, and assigning number to new variable [duplicate]逐行查找所有列中的 NA 数量,并将数字分配给新变量 [重复]
【发布时间】:2019-06-27 16:44:26
【问题描述】:

所以我有一个包含多列和多行的数据框。我希望能够将所有列中的 NA 数量逐行分配给一个新变量(NACount)。像这样的:

Col1 Col2 Col3 Col4 NACount
 A     A   B    NA     1
 B     B   NA   NA     2

我构建了一个循环来执行此操作,但我的数据集很大,所以循环需要很长时间!这是我的代码:

    for(i in 1:nrow(dat)){

      temp = which(!is.na(dat[i,]))

      dat$NACount[[i]] = length(temp)

       }

请帮我找到一个更简单的方法来做到这一点!

非常感谢!

【问题讨论】:

  • dat$na_count = apply(dat,1,function(x) sum(is.na(x)))

标签: r na rowsum


【解决方案1】:

使用rowSums:

dat[["NACount"]] <- rowSums(is.na(dat))

这比apply 快得多:

microbenchmark::microbenchmark(
  rowSums = rowSums(is.na(dat)), 
  apply = apply(dat, 1, function(x) sum(is.na(x)))
)

输出:

Unit: microseconds
    expr     min       lq     mean  median       uq      max neval cld
 rowSums  78.033  88.4245 112.5160 106.839 116.1365  439.751   100  a 
   apply 632.643 657.8040 768.2667 674.395 725.2615 6124.064   100   b

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-06-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2014-04-25
    • 1970-01-01
    相关资源
    最近更新 更多