楼主: firstshine
8290 6

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

  • 0关注
  • 0粉丝

高中生

77%

还不是VIP/贵宾

-

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

楼主
firstshine 发表于 2019-11-13 14:30:08 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
假设说,数据是一个变量加上多个年份year和多个年龄组age-group,这个变量有很多NA空值。我现在已经按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




我现在想用每个year和age-group的mean_value来一一对应给每一个同样year和age-group的变量的空值进行赋值,我的code是这样写的:

data$variable [ data$surveyperiod_year == 2008 & data$age_group == 1 & is.na(data$svariable) == T] <- data_mean$variable_mean [ data_mean$surveyperiod_year == 2008 & data_mean$age_group == 1]


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

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





二维码

扫码加我 拉你入群

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

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

关键词:R语言 多条件 Dataframe Variable Survey

沙发
firstshine 发表于 2019-11-13 14:31:25
我的code是这样写的:

data$variable [ data$surveyperiod_year == 2008 & data$age_group == 1 & is.na(data$svariable) == T] <- data_mean$variable_mean [ data_mean$surveyperiod_year == 2008 & data_mean$age_group == 1]


藤椅
药引子5 发表于 2019-11-13 14:51:36
  1. library(dplyr)
  2. # data是你要处理的数据集
  3. # variable是你取均值的变量
  4. # variable_new是你最后需要的结果
  5. data_new <- data %>%
  6.   group_by(surveyperiod_year, age_group) %>%
  7.   mutate(variable_new = mean(variable, na.rm = T))
复制代码
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 精彩帖子

总评分: 论坛币 + 10   查看全部评分

板凳
firstshine 发表于 2019-11-13 15:10:41
药引子5 发表于 2019-11-13 14:51
谢谢回复!

但是这个代码的结果,是把所有的原值都按year和age group来一一赋值为均值了,不是我希望的只对其中的NA值赋值。如果要做到这样,代码该怎么写呢?

报纸
药引子5 发表于 2019-11-13 15:26:16
firstshine 发表于 2019-11-13 15:10
谢谢回复!

但是这个代码的结果,是把所有的原值都按year和age group来一一赋值为均值了,不是我希望的 ...
不好意思,理解错了。
  1. library(dplyr)
  2. # data是你要处理的数据集
  3. # variable是你取均值的变量
  4. # variable_new是你最后需要的结果
  5. data_new <- data %>%
  6.   group_by(surveyperiod_year, age_group) %>%
  7.   mutate(variable_new = ifelse(is.na(variable), mean(variable, na.rm = T), variable))
复制代码
已有 2 人评分论坛币 学术水平 热心指数 信用等级 收起 理由
cheetahfly + 10 精彩帖子
firstshine + 1 + 1 + 1 精彩帖子

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

地板
firstshine 发表于 2019-11-13 19:09:30
药引子5 发表于 2019-11-13 15:26
不好意思,理解错了。
非常非常感谢您!!!

7
熬夜头会秃 发表于 2019-11-14 13:29:05 来自手机
firstshine 发表于 2019-11-13 14:30
假设说,数据是一个变量加上多个年份year和多个年龄组age-group,这个变量有很多NA空值。我现在已经按year和 ...
光看代码,后面少了一个is.na,还有这个不用==T
已有 1 人评分学术水平 热心指数 信用等级 收起 理由
firstshine + 1 + 1 + 1 精彩帖子

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

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

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