You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 11:52:43