R语言中按个体重复指定单元格值的实现方法
解决R语言分组填充缺失值的问题
嗨,作为R语言新手碰到这种数据整理的需求太常见啦!我来给你两种简单易懂的方法,轻松实现按picode分组,把每组里IUGRsc1的非NA值填充到该组所有行中。
首先先确认你的数据集:
dfX <- data.frame("picode" = c(1,1,1,1,1,1,2,2,2,2,2,2,3,3,4,4,4,4,4,5,6,6,6,6), "Age" = c(0,7,14,21,28,30,0,7,14,21,28,30,0,8,0,8,15,21,29,0,0,5,7,14), "IUGRsc1" = c(0.12,NA,NA,NA,NA,NA,0.26,NA,NA,NA,NA,NA,0.15,NA,0.19,NA,NA,NA,NA,0.3,0.23,NA,NA,NA))
方法一:用dplyr的mutate+first组合
这是最直观的方式,先按picode分组,然后提取每组里IUGRsc1的非NA值,填充到整组:
# 先安装并加载dplyr包(如果没装过的话) # install.packages("dplyr") library(dplyr) dfX2 <- dfX %>% group_by(picode) %>% # 按个体picode分组 mutate(IUGRsc1 = first(na.omit(IUGRsc1))) %>% # 取每组非NA的第一个值,替换整列 ungroup() # 取消分组,回到普通数据框
方法二:用dplyr的fill函数
fill函数专门用来填充缺失值,设置方向后可以一键搞定:
dfX2 <- dfX %>% group_by(picode) %>% fill(IUGRsc1, .direction = "downup") %>% # 先向下填充,再向上(确保所有NA都被覆盖) ungroup()
你可以查看结果验证一下,比如用head(dfX2, 6),会看到picode=1的所有行IUGRsc1都是0.12,完全符合你的需求!
内容的提问来源于stack exchange,提问作者Kikirou
相关产品推荐
相关产品推荐

