楼主: wumujusha
11054 9

[问答] R中如何将NA替换为离他最近的有效值 [推广有奖]

  • 5关注
  • 8粉丝

已卖:1375份资源

讲师

43%

还不是VIP/贵宾

-

威望
0
论坛币
25680 个
通用积分
17.5409
学术水平
10 点
热心指数
14 点
信用等级
11 点
经验
36490 点
帖子
317
精华
0
在线时间
660 小时
注册时间
2008-10-12
最后登录
2025-6-1

楼主
wumujusha 发表于 2014-3-22 13:28:10 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
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

二维码

扫码加我 拉你入群

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

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

关键词:有效值 NUM 如何

回帖推荐

danica33 发表于4楼  查看完整内容

am

沙发
nieqiang110 学生认证  发表于 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]
已有 1 人评分经验 热心指数 收起 理由
cheetahfly + 30 + 1 热心帮助其他会员

总评分: 经验 + 30  热心指数 + 1   查看全部评分

藤椅
jmpamao 发表于 2014-3-22 23:57:09
应该没有==NA 这种写法,只有 is.na
感觉向量化没法一次解决 NA NA NA 连在一起时候的处理方式,(没法解决空间地址???)
只有老老实实的写FOR之类。。。 循环吧
已有 1 人评分经验 热心指数 收起 理由
cheetahfly + 30 + 1 热心帮助其他会员

总评分: 经验 + 30  热心指数 + 1   查看全部评分

板凳
danica33 发表于 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
>
这样就可以了


已有 3 人评分经验 学术水平 热心指数 信用等级 收起 理由
cheetahfly + 30 + 1 热心帮助其他会员
wumujusha + 1 + 1 + 1 精彩帖子
jmpamao + 1 + 1 精彩帖子

总评分: 经验 + 30  学术水平 + 2  热心指数 + 3  信用等级 + 1   查看全部评分

报纸
wumujusha 发表于 2014-3-27 12:54:51
danica33 发表于 2014-3-24 11:16
am
太好了。谢谢

地板
512002855 发表于 2014-4-14 14:39:51
安装  DMwR 包,里面有个knnImputation函数,可以用最近的K个邻居填补缺失值。

7
dxystata 发表于 2014-4-14 22:10:50
应该是LOCF吧!

8
fcfc2013 发表于 2018-1-29 13:47:52
  1. a <- c(12,13,NA,NA,5,NA,23)
  2. b <- na.locf(a)
  3. b
  4. [1] 12 13 13 13  5  5 23
复制代码

已有 1 人评分经验 热心指数 收起 理由
cheetahfly + 30 + 1 热心帮助其他会员

总评分: 经验 + 30  热心指数 + 1   查看全部评分

9
447098457 发表于 2018-1-29 16:59:04
学习了。。。

10
cheetahfly 在职认证  发表于 2018-1-29 19:28:48
  1. library(tidyverse)
  2. a %>%
  3.   tbl_df() %>%
  4.   fill(num)
复制代码

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

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