【问题标题】:How to not make dplyr mutate calculate for missing group如何不让 dplyr 变异计算缺失组
【发布时间】:2019-06-14 08:05:44
【问题描述】:

我的数据如下所示:

df=data.frame(a=1:6,b=rep(c("one","two"),each=3))
df[2,2]<-NA

我想计算每一行的每组的平均值,如下所示:

df %>% group_by(b) %>% mutate(mean=mean(a))

问题在于 R 将 NA 视为一个组。期望的输出是

平均=c(2,NA,2,5,5,5)。

尝试

df %>% group_by(b) %>% mutate(mean=if_else(b==NA,NA,mean(a)))

但这会引发错误

【问题讨论】:

  • 您不能使用== 测试NA 值,因为NAs 会传播。 1==NANA!使用is.na
  • 啊,是的,对不起!没找到……有点不知道要搜索什么=)

标签: group-by dplyr


【解决方案1】:

试试

df %>% group_by(b) %>% mutate(mean=mean(a)) %>% mutate(mean = if_else(is.na(b), NA_real_, mean))

【讨论】:

  • 是的,我自己刚才试过了,可以的!感谢您的帮助!你会碰巧知道为什么这是有效的,而不是我的尝试吗?
【解决方案2】:

如果您想避免错误消息:

library(hablar)

df %>% 
  convert(chr(b)) %>% 
  group_by(b) %>% 
  mutate(mean = if_else_(!is.na(b), mean(a), NA))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-18
    • 1970-01-01
    • 2019-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多