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

Finding number of NAs across all columns, row by row, and assigning number to new variable

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

       }

请帮我找到一个更容易 approach/way 的方法!

非常感谢!

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