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

多CSV文件读取合并及数据重排技术求助

问题:合并多个CSV文件并重塑数据格式

我有一个文件夹里的多个CSV文件,每个文件的数据格式如下(头部是用户信息,后续是成对的日期和数值列,对应col1-col4):

Name: John Los Angeles CA col1 col2 col3 col4 12/1/14 1:00 AM 13 12/5/14 1:00 AM 19 12/7/14 1:00 AM 32 12/11/14 1:00 AM 13 12/2/14 1:00 AM 91 12/6/14 1:00 AM 20.9 12/8/14 1:00 AM 111.9 12/7/14 1:00 AM 22.8 12/9/14 1:00 AM 22.8 12/8/14 1:00 AM 24.7 12/10/14 1:00 AM 24.7 12/11/14 1:00 AM 0

我需要把所有文件合并成单个DataFrame,并且将每一对(日期+数值)的数据上下堆叠,最终格式如下:

Date value variable Name city State file_name
12/1/14 1:00 AM 13 col1 John Los Angeles CA file
12/2/14 1:00 AM 91 col1 John Los Angeles CA file
12/5/14 1:00 AM 19 col2 John Los Angeles CA file
12/6/14 1:00 AM 20.9 col2 John Los Angeles CA file
...
12/11/14 1:00 AM 33 col1 hayes SD CA file_1

我已经尝试用raw = read.csv("file1.csv",header = T,skip = 1),但不知道接下来该怎么处理,希望得到帮助。


解决方案(R语言实现)

我给你整理了一套分步处理的方案,刚好匹配你用read.csv的R环境:

1. 加载必要的工具包

我们需要用到dplyr和tidyr做数据重塑,fs来批量获取文件列表,先安装并加载:

# 如果没安装过这些包,先运行这行
install.packages(c("dplyr", "tidyr", "fs"))
library(dplyr)
library(tidyr)
library(fs)

2. 编写单个CSV文件的处理函数

你的CSV格式比较特殊,头部是用户信息,后面是成对的日期+数值,所以先写一个函数来单独处理每个文件:

process_single_file <- function(file_path) {
  # 读取第一行内容,拆分出用户信息和变量名
  first_line <- readLines(file_path, n = 1) %>% strsplit(" ") %>% unlist()
  
  # 提取用户的Name、城市、州信息
  name_label_idx <- which(first_line == "Name:")
  Name <- first_line[name_label_idx + 1]
  # 这里假设城市是两个单词(比如Los Angeles),如果是单个单词就改成first_line[name_label_idx + 2]
  city <- paste(first_line[name_label_idx + 2], first_line[name_label_idx + 3])
  State <- first_line[name_label_idx + 4]
  
  # 提取变量名col1到col4
  variable_names <- first_line[which(first_line == "col1"):which(first_line == "col4")]
  
  # 读取数据部分:跳过第一行,把所有数据拆成单个元素,然后两两分组为日期和数值
  data_elements <- readLines(file_path, skip = 1) %>% strsplit(" ") %>% unlist()
  data_df <- tibble(
    Date = data_elements[seq(1, length(data_elements), 2)],
    value = as.numeric(data_elements[seq(2, length(data_elements), 2)])
  )
  
  # 给每行分配对应的变量名:每个变量对应相同数量的行,重复变量名即可
  rows_per_variable <- nrow(data_df) / length(variable_names)
  data_df <- data_df %>%
    mutate(variable = rep(variable_names, each = rows_per_variable)) %>%
    # 添加用户信息和当前文件名
    mutate(
      Name = Name,
      city = city,
      State = State,
      file_name = path_file(file_path)
    )
  
  return(data_df)
}

3. 批量处理所有文件并合并

接下来批量读取文件夹里的所有CSV文件,用上面的函数处理后合并成一个完整的DataFrame:

# 替换成你的CSV文件夹路径,比如"./my_csv_files"
csv_folder_path <- "your_csv_folder_path"
# 获取文件夹中所有CSV文件的路径
all_csv_files <- dir_ls(csv_folder_path, regexp = "\\.csv$")

# 批量处理所有文件并合并结果
final_merged_data <- purrr::map_dfr(all_csv_files, process_single_file)

# 调整列顺序为你想要的格式
final_merged_data <- final_merged_data %>%
  select(Date, value, variable, Name, city, State, file_name)

小提示

  • 如果你的城市名称是单个单词(不是像Los Angeles这样的双词),记得修改提取city的代码,把paste(...)改成first_line[name_label_idx + 2]即可
  • 处理完成后,可以用write.csv(final_merged_data, "merged_result.csv", row.names = FALSE)把结果保存成新的CSV文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:44:20