全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
8774 8
2015-10-28
写完以后的结果总是出问题,算出平均值了,但是它会出问题,比如第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
}
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2015-10-28 23:56:26
复制代码


少个, ,你那是提取的行,当然会出错
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-29 02:15:39
jiangbeilu 发表于 2015-10-28 23:56
少个, ,你那是提取的行,当然会出错
照你这样改之后报错了。
Error in `[<-`(`*tmp*`, , is.na(data[, i]), value = 5.84125874125874) :
  (subscript) logical subscript too long
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-29 04:29:42
for(i in 1:5){
  a=mean(na.omit(data[i,]))
  data[i,is.na(data[i,])]=a
}

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-29 05:15:58
creaoplus 发表于 2015-10-29 04:29
for(i in 1:5){
  a=mean(na.omit(data))
  data)]=a
你这个就完全错了额。。我要的是把NA替换成为当列的平均值哦
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

2015-10-29 08:12:17
复制代码
上面是顺着你的思路做的改进,在我的电脑上已经通过。
你原来代码中的问题存在于data[is.na(data[,i])]=a这一句,你可以调试一下,is.na(data[,i])返回的是一个(FALSE FALSE TRUE FALSE FALSE)之类的向量,被data[is.na(data[,i])]引用后,会自动循环补齐ncol(data)次,变成选定了第i列有空值的那一整行,并进行赋值,于是就出现了你反映的问题,变成data[is.na(data[, i]), i] 就能特指第i列,就能解决了。

这个错误再次反映了——矩阵本质就是向量。如果用向量化的思维去解决这个问题,可以不用循环就能达成:(假设原数据是矩阵,且每列有且只有一个NA值)
复制代码


二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群