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

R语言如何将三个时间点数据框合并为长格式数据框

R多时间点数据框直接合并为长格式方法

不需要先转宽格式再整形,也不需要手动枚举所有变量名,用tidyverse的行合并+按组填充即可实现,全程自动识别所有变量。

实现逻辑

  • 先给每个时间点的数据集标记对应的测量时间,直接纵向合并所有数据集
  • 按受访者ID分组,对所有列的缺失值做双向填充:时变变量(var1、var2等)每个时间点本身有观测值,不会被修改;固定变量(gender、job等)每个ID仅在某一个时间点有记录,会自动填充到该ID的所有时间行
  • 排序整理后即可得到目标长表

可直接运行的代码

# 加载依赖包
library(tidyverse)

# --------------------------
# 此处替换为你自己的三个数据框
# 示例数据构造(和给出的样例一致)
data1 <- tibble(
  ID = c(1,2,3),
  var1 = c(1,2,1),
  var2 = c(1,2,3),
  var3 = c(1,2,3),
  job = c(2,3,4),
  gender = c(0,1,0)
)

data2 <- tibble(
  ID = c(1,2,3),
  var1 = c(3,3,1),
  var2 = c(2,1,3),
  var3 = c(3,2,3)
)

data3 <- tibble(
  ID = c(1,2,3),
  var1 = c(1,2,1),
  var2 = c(2,2,3),
  var3 = c(1,2,3),
  happy = c(1,3,4),
  income = c(5,1,9)
)
# --------------------------

# 核心合并代码
combine_long <- list(
  "1" = data1,
  "2" = data2,
  "3" = data3
) %>% 
  # 自动为每个数据集添加time标记后纵向合并,无需手动指定列
  bind_rows(.id = "time") %>% 
  mutate(time = as.numeric(time)) %>%
  # 按ID分组补全固定变量
  group_by(ID) %>%
  # 双向填充所有列的缺失值,固定变量自动补全,时变变量不受影响
  fill(everything(), .direction = "downup") %>%
  # 按ID、时间排序,调整列顺序
  arrange(ID, time) %>%
  ungroup() %>%
  select(ID, time, everything())

结果说明

运行后得到的combine_long完全符合需求,var1/var2/var3自动取对应时间点的真实观测值,job/gender/happy/income等固定变量自动填充到每个ID的所有时间行,不需要手动写任何变量名,哪怕单份数据有上百个变量也可以直接运行。

注意:使用前请确认同一个ID对应的固定变量取值在不同时间点没有冲突,如果存在取值不一致的情况,填充时会优先保留最先读取到的值,建议提前做一致性校验。如果后续有更多时间点的数据,只需要把新的数据框加入上方的list()结构中,设置好对应的时间标签即可,不需要修改其他合并逻辑。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 05:54:25