我试图创建一个填充向量的循环" 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)))
(我知道这段代码做了同样的事情,但如果可能的话,我想把它作为一个循环。非常感谢!
答案 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
上使用它。