楼主: 李会超
3209 4

[程序分享] 关于缺失值插补法的一个例子 [推广有奖]

  • 1关注
  • 31粉丝

已卖:1167份资源

教授

33%

还不是VIP/贵宾

-

威望
0
论坛币
121240 个
通用积分
62.1000
学术水平
140 点
热心指数
152 点
信用等级
84 点
经验
56173 点
帖子
1180
精华
1
在线时间
1120 小时
注册时间
2008-11-6
最后登录
2024-4-29

楼主
李会超 发表于 2014-11-13 17:57:59 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
今天在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好用多了……
大家如果有向量化的方法实现这个效果,欢迎回帖。
二维码

扫码加我 拉你入群

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

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

关键词:缺失值 SQL数据库 数据库 sql sql数据库

已有 1 人评分论坛币 学术水平 热心指数 收起 理由
crystal8832 + 12 + 1 + 1 精彩帖子

总评分: 论坛币 + 12  学术水平 + 1  热心指数 + 1   查看全部评分

学无止境,坚持!

沙发
neversarah 发表于 2014-11-14 09:35:02
看这个帖子http://cos.name/cn/topic/129915/
已有 1 人评分经验 论坛币 收起 理由
李会超 + 36 + 12 强大的R包太多了……

总评分: 经验 + 36  论坛币 + 12   查看全部评分

藤椅
yywan0913 在职认证  发表于 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)    就不对了
恩,我的数据第一行是有值的,就没考虑第一行没值的情况

报纸
meishanjia1900 发表于 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。
已有 1 人评分经验 论坛币 收起 理由
李会超 + 60 + 24 分析的有道理

总评分: 经验 + 60  论坛币 + 24   查看全部评分

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-30 23:55