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

如何将多份年度Excel数据框合并为单个tibble?是否适用join函数?

解决方案:纵向堆叠数据集而非使用join函数

你不需要使用join类函数——这类函数的作用是横向关联不同数据集的列(比如根据共同的Code列把不同表的信息拼到同一行),而你需要的是将结构相似的数据集纵向堆叠(把不同年份的行合并到同一个表中),正确的做法是用bind_rows()(或批量处理的方式)完成合并,再按年份排序。

具体步骤与代码示例

方法1:逐个处理后合并

先给每个数据框添加对应的年份列,再合并排序:

library(dplyr)
library(readxl)
library(tibble)

# 读取数据并添加年份列
book_15 <- read_excel("data/book_15.xlsx") %>% mutate(year = 2015)
book_16 <- read_excel("data/book_16.xlsx") %>% mutate(year = 2016)
book_17 <- read_excel("data/book_17.xlsx") %>% mutate(year = 2017)
book_18 <- read_excel("data/book_18.xlsx") %>% mutate(year = 2018)
book_19 <- read_excel("data/book_19.xlsx") %>% mutate(year = 2019)

# 合并并按年份排序,转为tibble
combined_books <- bind_rows(book_15, book_16, book_17, book_18, book_19) %>%
  arrange(year) %>%
  as_tibble()

方法2:批量处理(更高效,避免重复代码)

利用purrr包的批量函数,一次性完成读取、加年份、合并:

library(dplyr)
library(readxl)
library(tibble)
library(purrr)

# 构建文件路径和对应年份的列表
file_paths <- paste0("data/book_", 15:19, ".xlsx")
years <- 2015:2019

# 批量读取数据、添加年份列并合并
combined_books <- map2_dfr(file_paths, years, function(file, y) {
  read_excel(file) %>% mutate(year = y)
}) %>%
  arrange(year)

为什么不用join函数?

join系列函数(如left_join()、inner_join())的核心是基于共同列匹配行,横向扩展列数——比如你有一个表存Code和2015年数据,另一个表存Code和2016年数据,用join可以把两年的数据拼到同一行。但你的需求是把所有年份的行放在同一个表中,列结构完全一致,这种场景下bind_rows()才是合适的工具。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:18:37