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

如何为数据框各观测个体补充行以统一观测数(LOCF方法)

长格式数据按个体补全至最大观测数(LOCF方法)

针对需求,这里提供两种常用的R语言实现方案,先确定所有个体中的最大观测行数,再对每个个体补全行并使用最后一次观测结转(LOCF)填充缺失值:

方法一:使用dplyr + tidyr包

属于tidyverse生态方案,代码可读性强:

library(dplyr)
library(tidyr)

# 计算所有id里的最大观测行数
max_n <- d %>% count(id) %>% pull(n) %>% max()

# 分组补全行并应用LOCF填充
result <- d %>%
  group_by(id) %>%
  # 把每个id的行扩展到max_n行,不足位置生成NA
  complete(rowid = 1:max_n) %>%
  # 向下填充NA,即用最后一次观测值补全
  fill(value, .direction = "down") %>%
  # 移除临时生成的rowid列,恢复原数据结构
  select(-rowid) %>%
  ungroup()

# 查看结果
print(result)

方法二:使用data.table包

适合处理大规模数据集,运行效率更高:

library(data.table)

# 转换为data.table格式
setDT(d)

# 计算最大观测行数
max_n <- d[, .N, by = id][, max(N)]

# 补全行并执行LOCF填充
result <- d[, .SD[rep(.I, max_n)][1:max_n], by = id] %>%
  .[, value := nafill(value, type = "locf"), by = id]

# 查看结果
print(result)

两种方法最终都会得到符合要求的结果:个体1补充2行value=12,个体2补充3行value=9,个体3保持原有的5行数据。

内容的提问来源于stack exchange,提问作者Stella

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 11:55:46