楼主: firstshine
3336 2

[问答] 求助!!! R语言如何在两个数据之间根据多条件进行赋值??? [推广有奖]

  • 0关注
  • 0粉丝

高中生

77%

还不是VIP/贵宾

-

威望
0
论坛币
4 个
通用积分
0
学术水平
0 点
热心指数
2 点
信用等级
0 点
经验
175 点
帖子
8
精华
0
在线时间
59 小时
注册时间
2007-10-7
最后登录
2020-3-29

5论坛币
原数据是一个变量加上多个年份year和多个年龄组age-group,这个变量有很多NA空值,像这样:

surveyperiod_yearage_groupvariable

2008

2

10

2008

2

7

2008

2

NA

2008

1

8

2009

2

5

2009

1

8

2009

3

NA

2009

4

7

2010

1

8

2010

1

8

2010

2

8

2010

4

NA

2010

3

10

2011

3

NA

2011

1

10

2011

3

7

2012

4

5

2012

4

NA

2012

3

NA

2012

2

8


我现在已经按year和age-group计算出了该变量的非NA值在不同年份中不同年龄组的均值,是像这样的dataframe:

surveyperiod_yearage_groupmean_value

2008

1

7.982143

2008

2

7.896907

2008

3

7.917293

2008

4

8.096491

2008

5

7.82906

2009

1

7.850242

2009

2

8.021739

2009

3

7.99537

2009

4

8.066372

2009

5

7.99569

2010

1

7.988827

2010

2

7.873016

2010

3

8.199029

2010

4

8

2010

5

7.961686

2011

1

7.565934

2011

2

8.045455

2011

3

7.855346




我现在想用每个year和age-group的mean_value来一一对应给每一个同样year和age-group的变量的空值进行赋值,比如对于year=2008和age-group=1的variable中的NA进行赋值,我的code是这样写的:

data4variable[data4surveyperiod_year == 2008 & data4age_group == 1 & is.na(data4variable) == T] <- data_mean4variable_mean[data_mean4surveyperiod_year == 2008 & data_mean4age_group == 1]


但是结果不对,R不是把variable中的NA进行一一赋值,而是全部赋值了,并且赋值也不是按同样的year和age-group,而是按同行进行的。

请教各位老师,我应该怎么做?谢谢!!!

最佳答案

关键词:R语言 多条件 Dataframe Variable groupvar R语言 求助
沙发
lightknightisme 学生认证  发表于 2019-11-13 14:49:52 |只看作者 |坛友微信交流群
total_data<-merge(data4variable,data_mean4variable_mean,
        by.x=c("surveyperiod_year","age_group"),
        by.y=c("surveyperiod_year","age_group"),
        all.x=TRUE)

total_data$variable<-ifelse(is.na(total_data$variable)==TRUE,total_data$mean_value,total_data$variable)
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 精彩帖子
firstshine + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 30  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

藤椅
skyfx 发表于 2019-11-14 16:56:47 |只看作者 |坛友微信交流群
  1. library(dplyr)

  2. data <- '你的原始数据data.frame'
  3. data.mean <- '你的均值data.frame'

  4. data.na <- data %>%
  5.   filter(is.na(variable)) %>%
  6.   left_join(data.mean)

  7. data.out <- data %>%
  8.   filter(!is.na(variable)) %>%
  9.   bind_rows(data.na) %>%
  10.   arrange(surveyperiod_year, age_group)
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
admin_kefu + 30 精彩帖子
firstshine + 1 + 1 + 1 精彩帖子

总评分: 论坛币 + 30  学术水平 + 1  热心指数 + 1  信用等级 + 1   查看全部评分

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-23 20:10