所以我有一个包含多列和多行的数据框。我希望能够将所有列中的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)
}
请帮助我找到一种更简单的方法/方式!
非常感谢!
答案 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