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

在R语言中按ID与DATE键合并两个数据框列表的方法求助

用ID和DATE合并R中的两个数据框列表

嘿,我来帮你解决这个合并需求~ 先结合你给出的示例数据,我补全第二个列表的结构(假设它和第一个列表对应ID的时间序列匹配),然后给你两种实用的解决方案:

方法一:合并成单个大数据框

如果希望把两个列表里的所有数据整合到一个大表中,再按ID和DATE匹配,可以这么做:

首先加载需要的包,然后合并列表内的数据,最后进行匹配合并:

library(dplyr)

# 补全你未写完的第二个列表示例
names2 <- c("df_auto1", "df_auto2")
mydf_auto1 <- data.frame(ID=c(22319, 22319), DATE=c("2011-09-30","2011-10-31"), AUTO_SCORE = c(700, 710))
mydf_auto2 <- data.frame(ID=c(115477, 115477), DATE=c("2012-01-31","2012-02-29"), AUTO_SCORE = c(680, 640))
list2 <- list(mydf_auto1, mydf_auto2)
names(list2) <- names2

# 将每个列表内的所有数据框纵向合并成大表,同时保留来源标识
combined_list1 <- bind_rows(list1, .id = "source_df")
combined_list2 <- bind_rows(list2, .id = "source_auto_df")

# 按ID和DATE进行内连接(只保留两边都有的匹配行,也可以用left_join/right_join调整)
merged_data <- inner_join(combined_list1, combined_list2, by = c("ID", "DATE"))

# 查看结果
print(merged_data)

运行后你会得到一个包含所有匹配上的ID、DATE、SCORE和AUTO_SCORE的大数据框,还能看到每条数据来自原列表的哪个子数据框。

方法二:保留列表结构,按ID逐一合并

如果想保留原有的列表结构,让每个ID对应的数据框单独合并,可以借助purrr包来实现:

library(purrr)
library(dplyr)

# 把两个列表的名称改成对应的ID(每个子数据框的ID是唯一的,取第一个即可)
names(list1) <- map_chr(list1, ~ unique(.x$ID))
names(list2) <- map_chr(list2, ~ unique(.x$ID))

# 按ID匹配,逐一合并对应的子数据框
merged_list <- map2(list1[names(list2)], list2, ~ inner_join(.x, .y, by = c("ID", "DATE")))

# 查看合并后的列表
print(merged_list)

这样得到的merged_list里,每个元素就是对应ID的合并后数据框,方便后续对单个ID的数据进行单独分析。

你可以根据自己的实际需求选择这两种方法,如果需要调整连接方式(比如保留所有左边的行),只需要把inner_join换成left_join就好啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:33:51