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

在R语言中合并列表内数据框的共同列

合并列表中数据框并保留共同列

问题背景

现有如下R语言代码创建的列表对象:

df1 <- data_frame(ID = paste0(LETTERS[1],1:4), valueA = seq(0.1,0.4,0.1), Category= "Apples", valueDEF = seq(0.1,0.4,0.1), valueDEF2 = seq(0.1,0.4,0.1) )
df2 <- data_frame(ID = paste0(LETTERS[1],5:8), valueB = seq(0.1,0.4,0.1),  Category= "Apples2")
df3 <- data_frame(ID = paste0(LETTERS[1],9:12), valueC = seq(0.1,0.4,0.1),  Category= "Apples3")

list1 <- list(df1, df2, df3);list1

列表结构如下:

[[1]]
# A tibble: 4 × 5
  ID    valueA Category valueDEF valueDEF2
  <chr>  <dbl> <chr>       <dbl>     <dbl>
1 A1       0.1 Apples        0.1       0.1
2 A2       0.2 Apples        0.2       0.2
3 A3       0.3 Apples        0.3       0.3
4 A4       0.4 Apples        0.4       0.4

[[2]]
# A tibble: 4 × 3
  ID    valueB Category
  <chr>  <dbl> <chr>   
1 A5       0.1 Apples2 
2 A6       0.2 Apples2 
3 A7       0.3 Apples2 
4 A8       0.4 Apples2 

[[3]]
# A tibble: 4 × 3
  ID    valueC Category
  <chr>  <dbl> <chr>   
1 A9       0.1 Apples3 
2 A10      0.2 Apples3 
3 A11      0.3 Apples3 
4 A12      0.4 Apples3 

需求是合并列表中的数据框,仅保留所有数据框共有的ID和Category列,预期输出如下:

ID Category
A1  Apples 
A2  Apples 
A3  Apples 
A4  Apples 
A5  Apples2 
A6  Apples2
A7  Apples2
A8  Apples2 
A9  Apples3 
A10 Apples3 
A11 Apples3 
A12 Apples3 

解决方案

方法1:使用tidyverse工具包(dplyr)

借助dplyr的bind_rows按列名合并数据框,再用select筛选目标列:

library(dplyr)

# 合并并筛选列
result <- bind_rows(list1) %>% 
  select(ID, Category)

# 查看结果
print(result)

方法2:使用Base R原生函数

通过lapply提取每个数据框的目标列,再用do.call(rbind, ...)合并:

# 提取指定列并合并
result <- do.call(rbind, lapply(list1, function(df) df[, c("ID", "Category")]))

# 查看结果
print(result)

两种方法都能得到符合预期的输出。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 19:15:09