全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 R语言论坛
3157 4
2014-11-13
今天在sql数据库里面查询的时候,发现某列数据有比较多的缺失值,要求该列数据的缺失值用前面的非缺失值填充。但前一个可能也是缺失的,用sql写了好久,算是搞定了,可惜公司数据库没权限连接R,不然就简单了。如有一列数据 y<-c(10,NA,NA,50,NA)
则实现的编程为
for(i in 1:5) {
if (is.na(y[i])==TRUE) y[i]<-y[i-1]
}



用sas的话,则写如下代码
data e;                                                                                                                                
set a;                                                                                                                                 
retain z;                                                                                                                              
if y^=. then z=y;      

都比坑爹的sql好用多了……
大家如果有向量化的方法实现这个效果,欢迎回帖。
二维码

扫码加我 拉你入群

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

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

全部回复
2014-11-14 09:35:02
看这个帖子http://cos.name/cn/topic/129915/
二维码

扫码加我 拉你入群

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

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

2014-11-14 10:55:10
这个例子有bug啊   如果y=c(NA,10,NA,50,NA)    就不对了
二维码

扫码加我 拉你入群

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

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

2014-11-14 10:58:43
yywan0913 发表于 2014-11-14 10:55
这个例子有bug啊   如果y=c(NA,10,NA,50,NA)    就不对了
恩,我的数据第一行是有值的,就没考虑第一行没值的情况
二维码

扫码加我 拉你入群

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

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

2014-11-14 11:39:11
李会超 发表于 2014-11-13 17:57
今天在sql数据库里面查询的时候,发现某列数据有比较多的缺失值,要求该列数据的缺失值用前面的非缺失值填充 ...
length.x = 20000
x = runif(length.x, min = 1, max = 100)
x[ sample(2:length.x, 6000) ] = NA

setNA1 = function(x) {
    x[ is.na(x) ] = x[ which(is.na(x)) - 1 ]
    if (any(is.na(x))) return(setNA1(x)) else return(x)
}

setNA2 = function(x) {
    for (i in 2:length(x)) if (is.na(x[ i ])) x[ i ] = x[ i - 1 ]
    return(x)
}

system.time(setNA1(x))
system.time(setNA2(x))

从耗费时间的对比上,方法1要略优于方法2。
二维码

扫码加我 拉你入群

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

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

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

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