创建一个循环,填充一个数字为" NA"按列的值

时间:2018-02-15 16:00:31

标签: r

我试图创建一个填充向量的循环" naVals"数量为" NA"数据框中按列的值" wb。"到目前为止我有这个:

naVals <- rep(NA, 24)
for (i in 1:24){
    naVals[i] <- sum(is.na(wb$v[i]))
}  

这不起作用,我无法弄清楚原因!

naVals <- apply(wb,2,function(wb)sum(is.na(wb)))

(我知道这段代码做了同样的事情,但如果可能的话,我想把它作为一个循环。非常感谢!

1 个答案:

答案 0 :(得分:1)

如@joran在评论中所述,如果您将wb$v[i]替换为wb[[i]],则for循环将有效。

在您当前发布的表单中,您已经提取了列v,并且在行而不是列上进行了子集化。你想要的是:

naVals <- rep(NA, 24)
for (i in 1:24) {
    naVals[i] <- sum(is.na(wb[[i]]))
}

但是还有一些额外的建议。如果您希望此代码适用于不同的数据帧而不是那么具体,那么我建议如下:

naVals <- numeric()
for (i in ncol(wb)) {
    naVals[i] <- sum(is.na(wb[[i]]))
}

这样您就不必经常编辑for循环和naVals初始化。您只需要在新的wb上使用它。