如何按分组首个值填充数据框NA值?tidyr::fill可行吗?
解决方案
tidyr::fill() 没办法直接实现「用分组首个值填充NA」的需求,因为它的逻辑是沿指定方向填充相邻的前一个非NA值,而非固定取分组的第一个值。不过可以用 dplyr 结合 tidyr 的工具,在管道链里优雅实现:
方法一:replace_na() + first()
library(dplyr) library(tidyr) df %>% group_by(group) %>% mutate(val = replace_na(val, first(val))) %>% ungroup()
方法二:coalesce() + first()
也可以用 dplyr::coalesce(),它会返回第一个非NA值,对NA来说就是我们指定的分组首值:
df %>% group_by(group) %>% mutate(val = coalesce(val, first(val))) %>% ungroup()
结果验证
运行后得到的结果符合预期:
group val 1 A 1 2 A 2 3 A 1 4 A 1 5 B 4 6 B 3 7 B 4 8 B 4
内容的提问来源于stack exchange,提问作者Revan
相关产品推荐
相关产品推荐

