写完以后的结果总是出问题,算出平均值了,但是它会出问题,比如第3行第2列有个NA,他计算好第2列的平均值后,将其写到第3行第2列的NA了,但是把第3行第4,5列正常的数值也修改为刚刚求出的平均值了。。。不知道为什么啊。函数哪里写错了嘛?
for(i in 1:5){
a=mean(na.omit(data[,i]))
data[is.na(data[,i])]=a
}
楼主: xuxinzju
|
8283
8
[问答] 矩阵中NA值需要将其替换为它所在列的平均值 |
初中生 42%
-
|
回帖推荐cheetahfly 发表于6楼 查看完整内容 上面是顺着你的思路做的改进,在我的电脑上已经通过。
你原来代码中的问题存在于data)]=a这一句,你可以调试一下,is.na(data[,i])返回的是一个(FALSE FALSE TRUE FALSE FALSE)之类的向量,被data)]引用后,会自动循环补齐ncol(data)次,变成选定了第i列有空值的那一整行,并进行赋值,于是就出现了你反映的问题,变成data), i] 就能特指第i列,就能解决了。
这个错误再次反映了——矩阵本质就是向量。如果用向量化的思维去解 ...
| ||
| ||
| ||
| ||
| ||
京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明 免责及隐私声明