在所有列中逐行查找NA的数量,并将数量分配给新变量

时间:2019-06-27 16:44:26

标签: r na rowsum

所以我有一个包含多列和多行的数据框。我希望能够将所有列中的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)

       }

请帮助我找到一种更简单的方法/方式!

非常感谢!

1 个答案:

答案 0 :(得分:3)

使用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