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

如何在R中合并列数不同、列类型不一致的两个CSV文件

解决CSV文件合并的列数不匹配与类型不一致问题

核心解决步骤

  • 统一读取规则,避免关键列类型冲突
  • 使用bind_rows()(或map_dfr())自动处理列数差异
  • 合并后统一转换列类型

具体实现代码

首先加载tidyverse包(整合了readr、dplyr、purrr等工具包):

library(tidyverse)

1. 获取文件路径并批量读取

自定义读取函数,强制将DATE列按字符型读取,避免不同文件中该列类型不一致导致的冲突:

# 获取目标目录下所有CSV文件的完整路径
data_all <- list.files(
  path = "D:/Utilisateur/Desktop/STAGE/data2",
  pattern = "*.csv", 
  full.names = TRUE
)

# 自定义安全读取函数
read_csv_safe <- function(file_path) {
  read_csv(
    file_path,
    col_types = cols(
      DATE = col_character(),  # 统一按字符读取DATE列
      .default = col_guess()   # 其他列自动识别类型
    )
  )
}

# 批量读取所有文件并合并,缺失列自动填充NA
all_data <- map_dfr(data_all, read_csv_safe)

2. 统一转换DATE列为日期类型

用lubridate包的dmy()函数(适配日-月-年格式)将字符型日期转为标准日期类型,NA值会自动保留为日期型NA:

all_data <- all_data %>%
  mutate(DATE = dmy(DATE))

如果你的日期格式是月-日-年,替换为mdy(DATE)即可。

3. 保存合并后的文件

dest_file <- file.path("data", "all_data.csv")
write_csv(all_data, dest_file)  # 用write_csv避免生成多余行号,更适配CSV格式

关键说明

  • 替换原循环:原循环存在索引越界问题(当i等于文件总数时,i+1超出范围),map_dfr()批量处理更安全简洁
  • 列数处理:map_dfr()自动识别所有文件的列,缺失列会自动补NA,解决列数不匹配问题
  • 类型处理:先统一按字符读取DATE列,合并后再转为日期类型,彻底解决类型冲突

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 18:03:14