按组计算均值时的NA问题

时间:2019-12-02 11:08:30

标签: r dataframe group-by na

我想通过按组new计算变量old的平均值来添加变量groupID

  1. 创建数据框

    df <- data.frame('old'=c('20','21',NA,'30','31'), 'groupID'=c(1,1,1,2,2))

  2. 在函数内使用以创建新变量

    df <- within(df, {new = ave(old, groupID, FUN= mean)})

但是,“旧”中的NA使“新”中的所有值变为缺失值。 如何忽略NA并仍然获得新变量的均值?

完美的结果必须是这样的:

df<-data.frame('old'=c('20','21',NA,'30','31'), 
               'groupID'=c(1,1,1,2,2), 
               'new'=c(20.5,20.5,20.5,30.5,30.5))

非常感谢初学者!

1 个答案:

答案 0 :(得分:1)

df <- within(df, {new = ave(old, groupID, FUN= function(x) mean(x, na.rm=TRUE))})

如果您不想以其他(数字)格式重写所有输入数据,