全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
10969 9
2014-03-22
R中如何将NA替换为离他最近的有效值
例如:
矩阵a
id     num
1     12
2     13
3     NA
4     NA
5     5
6     NA
7     23

处理后的矩阵为:
id     num
1     12
2     13
3     13
4     13
5     5
6     5
7     23

二维码

扫码加我 拉你入群

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

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

全部回复
2014-3-22 20:07:39
data$num[which(data$num==NA)]<-data$num[which(data$num==NA)-1]
data$num[which(data$num==NA)]<-data$num[which(data$num==NA)-1]
二维码

扫码加我 拉你入群

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

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

2014-3-22 23:57:09
应该没有==NA 这种写法,只有 is.na
感觉向量化没法一次解决 NA NA NA 连在一起时候的处理方式,(没法解决空间地址???)
只有老老实实的写FOR之类。。。 循环吧
二维码

扫码加我 拉你入群

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

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

2014-3-24 11:16:38
am<-matrix(c(1:7,12,13,NA,NA,5,NA,23),ncol=2)
colnames(am)<-c("id","num")


lessmax<-function(x,y) tail(x[x<=y],n=1)  ##函数用来求最近非NA下标
lessmax<-Vectorize(lessmax,"y") ##对第二个参数向量化
ind.na<-which(is.na(am[,"num"])) ##num为NA的行下标
ind.nna<-which(!is.na(am[,"num"])) ##num不为NA的行下标
am ##原始的矩阵
     id num
[1,]  1  12
[2,]  2  13
[3,]  3  NA
[4,]  4  NA
[5,]  5   5
[6,]  6  NA
[7,]  7  23
ind.na
[1] 3 4 6
ind.nna
[1] 1 2 5 7
am[is.na(am[,"num"]),"num"]<-am[lessmax(ind.nna,ind.na),"num"] ##替换
am  ##替换后的矩阵
     id num
[1,]  1  12
[2,]  2  13
[3,]  3  13
[4,]  4  13
[5,]  5   5
[6,]  6   5
[7,]  7  23
>
这样就可以了


二维码

扫码加我 拉你入群

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

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

2014-3-27 12:54:51
danica33 发表于 2014-3-24 11:16
am
太好了。谢谢
二维码

扫码加我 拉你入群

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

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

2014-4-14 14:39:51
安装  DMwR 包,里面有个knnImputation函数,可以用最近的K个邻居填补缺失值。
二维码

扫码加我 拉你入群

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

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

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

说点什么

分享

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