在R语言中为数据集补全年份缺失行并设置对应变量值
修正后的R代码实现需求
原代码的核心问题:
- 冗余的
fill操作:complete已经为每个id生成了完整年份序列,无需对year列做填充;对var的填充完全多余,后续的mutate(var=0)还直接覆盖了所有原有值。
以下是修正后的代码:
library(dplyr) library(tidyr) my_data %>% group_by(id) %>% # 生成每个id从最小年份到最大年份的连续序列 complete(year = full_seq(year, period = 1)) %>% # 将新增行的NA值替换为0,保留原有行的var值 mutate(var = ifelse(is.na(var), 0, var)) %>% ungroup()
运行后得到的预期结果:
# A tibble: 16 × 3 id year var <chr> <dbl> <dbl> 1 james 2013 1 2 james 2014 0 3 james 2015 0 4 james 2016 1 5 james 2017 1 6 james 2018 1 7 james 2019 0 8 james 2020 1 9 john 2010 1 10 john 2011 1 11 john 2012 0 12 john 2013 0 13 john 2014 1 14 john 2015 0 15 john 2016 1 16 john 2017 1
代码逻辑说明
group_by(id):按用户id分组,保证每个id独立处理年份序列complete(year = full_seq(year, period = 1)):为每个id生成从自身最小年份到最大年份的连续年份,新增行的var会自动标记为NAmutate(var = ifelse(is.na(var), 0, var)):将新增行的NA值替换为0,原有存在的var值保持不变ungroup():取消分组,恢复为普通数据结构
内容的提问来源于stack exchange,提问作者stats_noob
相关产品推荐
相关产品推荐

