如何为tibble按ID补全固定年份范围的缺失行并保留原有数据
为每个ID补全指定年份范围的缺失行并保留原有数据
输入数据
tibble::tribble( ~Year, ~ID, ~Size, 2006, 1, 5, 2007, 1, 8, 2009, 2, 6, 2010, 2, 4, 2007, 3, 1, 2009, 3, 2 )
需求
为每个ID(1、2、3)补全2006-2010年份范围内的所有缺失行,保留原有行的Size数据,新增行的Size列填充NA。
期望输出
tibble::tribble( ~Year, ~ID, ~Size, 2006, 1, 5, 2007, 1, 8, 2008, 1, NA, 2009, 1, NA, 2010, 1, NA, 2006, 2, NA, 2007, 2, NA, 2008, 2, NA, 2009, 2, 6, 2010, 2, 4, 2006, 3, NA, 2007, 3, 1, 2008, 3, NA, 2009, 3, 2, 2010, 3, NA )
解决方案
使用tidyr包的complete()函数可以直接实现需求,无需循环或add_rows:
library(tidyverse) # 定义输入数据 df <- tibble::tribble( ~Year, ~ID, ~Size, 2006, 1, 5, 2007, 1, 8, 2009, 2, 6, 2010, 2, 4, 2007, 3, 1, 2009, 3, 2 ) # 补全年份与ID的所有组合 df_complete <- df %>% complete(ID, Year = 2006:2010) # 输出结果 print(df_complete)
说明
complete(ID, Year = 2006:2010)会按ID分组,生成2006到2010年的所有年份组合,原有数据的Size值会被保留,缺失组合的Size自动填充为NA,完全匹配需求。
内容的提问来源于stack exchange,提问作者I. G.
相关产品推荐
相关产品推荐

