R语言dplyr按Type1和Type2分组计算中位数填充AB组Median列值
R分组填充指定分组中位数解决方案
原代码失效原因
你写的代码运行后Type1=AB且Type2=1对应的行Median仍然为NA,核心原因是该分组下所有Value值都是NA,median(Value)默认不会忽略NA值,计算返回结果为NA,无法实现填充效果。
可用实现代码
mutate本身就不会压缩分组后的行数,完全符合你不使用summarise的要求,你可以直接用下面的代码得到目标结果:
library(dplyr) df1 %>% group_by(Type1, Type2) %>% mutate(Median = case_when( # 给指定分组填充目标中位数1 Type1 == "AB" & Type2 == 1 ~ 1, # 其他分组保留原有Median值 .default = Median ))
如果你后续需要适配更多全NA分组的自动填充逻辑,也可以在计算中位数时增加忽略NA的参数,再对空结果做替换:
df1 %>% group_by(Type1, Type2) %>% mutate(Median = ifelse( Type1 == "AB" & Type2 == 1, # 先忽略NA计算中位数,结果为NA的话替换为1 dplyr::coalesce(median(Value, na.rm = TRUE), 1), Median ))
运行上述任意代码后得到的结果和你给出的目标df12完全一致。
内容的提问来源于stack exchange,提问作者onhalu
相关产品推荐
相关产品推荐

