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

合并数据框列表并提取行索引为新列的实现方法

问题与解决方案:合并数据框列表时保留所有行与行索引

问题背景

现有一个包含3个数据框的列表my_list,每个数据框的行索引对应文件名:

my_list <-  list(structure(list(observations = c(1L, 5L), variables = c(4L, 
                                                                        8L)), class = "data.frame", row.names = c("asp_202003...Copy.xlsx", 
                                                                                                                  "asp_202003.xlsx")), structure(list(observations = c(3L, 1L), 
                                                                                                                                                      variables = 5:4), class = "data.frame", row.names = c("eay_201008_a.xlsx", 
                                                                                                                                                                                                            "eay_202003.xlsx")), structure(list(observations = 3:4, variables = c(4L, 
                                                                                                                                                                                                                                                                                  6L)), class = "data.frame", row.names = c("wana_202309...Copy.xlsx", 
                                                                                                                                                                                                                                                                                                                            "wana_202309.xlsx")))

使用reduce(full_join)合并时:

my_merge <- my_list %>% reduce(full_join)

出现两个问题:

  • 原6行数据合并后仅剩5行,重复行被自动合并
  • 原数据框的行索引(文件名)未被保留

需求:合并后保留全部6行数据,同时将原行索引提取为名为file的新列。

解决方案

不需要用full_join(它是按列匹配合并的逻辑),而是用map_dfr遍历每个数据框,先将行索引转为file列,再行绑定所有数据框:

library(tidyverse)

my_merge <- my_list %>%
  map_dfr(~ .x %>% rownames_to_column(var = "file"))

输出结果

运行后得到的结果包含全部6行,且保留了每个数据的文件名:

# A tibble: 6 × 3
  file                      observations variables
  <chr>                            <int>     <int>
1 asp_202003...Copy.xlsx               1         4
2 asp_202003.xlsx                      5         8
3 eay_201008_a.xlsx                    3         5
4 eay_202003.xlsx                      1         4
5 wana_202309...Copy.xlsx              3         4
6 wana_202309.xlsx                     4         6

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:53:20