R新手求助:合并12个同列名月度数据表及批量读取CSV方法
解决方法
批量读取CSV文件
你现在逐个读取文件的方式太繁琐,用以下方法可以一次性读取所有目标CSV:
首先加载tidyverse包(包含read_csv和批量处理工具):
library(tidyverse)
然后获取所有CSV文件的路径(假设文件都在当前工作目录):
# 匹配所有包含divvy-tripdata的CSV文件,适配你文件名的格式 csv_files <- list.files(pattern = "divvy.*tripdata\\.csv$", full.names = TRUE)
接着批量读取所有文件,得到一个由数据框组成的列表:
trip_data_list <- map(csv_files, read_csv)
合并月度数据为年度数据
因为你的所有表格列名一致,需要的是行堆叠(不是join类的列匹配),用bind_rows()函数直接合并列表里的所有数据框,会完整保留所有列:
annual_trip_data <- bind_rows(trip_data_list)
额外优化:保留月份来源
如果需要知道每一行属于哪个月度,可以在读取时新增一列标记来源:
trip_data_list <- map(csv_files, function(file) { # 从文件名提取6位数字的日期(比如202111)作为月份标识 month_tag <- str_extract(file, "\\d{6}") read_csv(file) %>% mutate(month = month_tag) })
合并后annual_trip_data会多一列month,方便后续按月份分析。
不用tidyverse的替代方案
如果不想用tidyverse,用base R也能实现:
# 批量读取 csv_files <- list.files(pattern = "divvy.*tripdata\\.csv$", full.names = TRUE) trip_data_list <- lapply(csv_files, read.csv) # 注意这里是read.csv不是read_csv # 合并 annual_trip_data <- do.call(rbind, trip_data_list)
内容的提问来源于stack exchange,提问作者James Hill
相关产品推荐
相关产品推荐

