【发布时间】:2021-05-20 19:31:47
【问题描述】:
我正在创建一个新变量,并且由于 NA 以及只有一些人符合分组标准,我最终在我的最终数据集中创建了许多新的 NA。
Here 是数据。
更新示例数据框:
id age year var1
4 KL 2007 15
1 KL 2008 10
2 KL 2008 20
4 AG 2008 NA
3 AG 2008 5
3 SU 2009 NA
4 SU 2009 NA
4 LL 2011 NA
数据框细微差别:
-
age=="KL" & year==2007只有 1 行(有值) -
age=="KL" & year==2008有多行(带值) -
age=="AG" & year==2008有多行(带有值和 NA) -
age=="SU" & year==2009有多行(仅限 NA) -
age=="LL" & year==2011只有 1 行(带 NA)
示例公式:
df<-df %>%
group_by(age, year) %>%
mutate(new_var1=((var1-mean(var1, na.rm=T))/(1*(sd(var1, na.rm=T)))))
当前输出:
id age year var1 new_var1
4 KL 2007 15 NA
1 KL 2008 10 -0.7071068
2 KL 2008 20 0.7071068
4 AG 2008 NA NA
3 AG 2008 5 NA
3 SU 2009 NA NA
4 SU 2009 NA NA
4 LL 2011 NA NA
期望的输出:
id age year var1 new_var1
4 KL 2007 15 0
1 KL 2008 10 -0.7071068
2 KL 2008 20 0.7071068
4 AG 2008 NA NA
3 AG 2008 5 0
3 SU 2009 NA NA
4 SU 2009 NA NA
4 LL 2011 NA NA
我怎样才能保留现有的 NA(那些是缺失数据的真实实例),同时强制新 NA 的任何实例(因为该行是唯一的记录)为 0 而不是 NA?
非常感谢dplyr 解决方案。
我知道如何用零替换 NA(例如,mutate(new_var1=ifelse(is.na(new_var1), 0, new_var1))),但这会替换所有 NA,而不仅仅是新的 NA。
【问题讨论】:
-
id 4 的最后一行的输出是什么
-
就像一个菜鸟一样,我没有指定年龄的编码(它是分类的,而不是数字的)。我还在问题中添加了真实数据。
-
这并不重要,因为我们正在进行分组并且值是根据数字计算的
-
嗯。对我来说,这一定是一件非常愚蠢的事情。不过我不想再浪费你的时间了,所以谢谢你的帮助!