R语言按分组使用1997-2001数值序列唯一填充缺失值NA问题
R按分组填充缺失年份解决方案
核心实现逻辑:按id分组,取出每个分组中已存在的非空年份,用1997~2001的固定序列和已有年份的差集替换对应分组的NA值即可。
解法1:tidyverse(dplyr)实现
library(dplyr) # 定义目标年份序列 target_years <- 1997:2001 result <- d %>% group_by(id) %>% mutate(year = replace(year, is.na(year), setdiff(target_years, year[!is.na(year)]))) %>% ungroup()
解法2:Base R实现
target_years <- 1997:2001 result <- d result$year <- unlist(lapply(split(d$year, d$id), function(group_y) { group_y[is.na(group_y)] <- setdiff(target_years, group_y[!is.na(group_y)]) group_y }))
最终输出结果
print(result) #> id year #> 1 1 1997 #> 2 1 1998 #> 3 1 1999 #> 4 1 2000 #> 5 1 2001 #> 6 2 1997 #> 7 2 1998 #> 8 2 1999 #> 9 2 2000 #> 10 2 2001 #> 11 3 1997 #> 12 3 1998 #> 13 3 1999 #> 14 3 2000 #> 15 3 2001
内容的提问来源于stack exchange,提问作者Maël
相关产品推荐
相关产品推荐

