在新增列中填充日期的R语言高效批量处理方案
批量处理表格:提取日期并新增列填充
单个表格处理方法
使用tidyverse(推荐,代码更易读)
library(dplyr) # 示例数据 df <- data.frame( x1 = c("17.10.2022", "Godzina", "00:00 - 01:00", "01:00 - 02:00", "02:00 - 03:00", "03:00 - 04:00", "04:00 - 05:00", "05:00 - 06:00", "06:00 - 07:00"), x2 = c(NA, NA, 17.09497, 17.29869, 17.34341, 17.10647, 17.10647, 17.01680, 17.18461) ) # 处理逻辑 df_processed <- df %>% # 提取第一行的日期作为x3列值 mutate(x3 = first(x1)) %>% # 剔除前两行无效数据 slice(-(1:2)) %>% # 重置行号并调整列顺序 mutate(rowid = row_number()) %>% select(rowid, everything()) %>% relocate(rowid, .before = x1) %>% rename(` ` = rowid) # 查看结果 df_processed
使用Base R(无需额外包)
# 示例数据 df <- data.frame( x1 = c("17.10.2022", "Godzina", "00:00 - 01:00", "01:00 - 02:00", "02:00 - 03:00", "03:00 - 04:00", "04:00 - 05:00", "05:00 - 06:00", "06:00 - 07:00"), x2 = c(NA, NA, 17.09497, 17.29869, 17.34341, 17.10647, 17.10647, 17.01680, 17.18461) ) # 提取日期 date_val <- df$x1[1] # 筛选有效数据行并新增x3列 df_processed <- df[3:nrow(df), ] df_processed$x3 <- date_val # 重置行号 rownames(df_processed) <- 1:nrow(df_processed) # 查看结果 df_processed
批量处理一千个表格(高效方案)
假设所有表格以CSV格式存储在data文件夹中,使用purrr实现批量处理:
library(purrr) library(dplyr) # 1. 读取所有表格到列表 file_paths <- list.files(path = "data", pattern = "*.csv", full.names = TRUE) df_list <- map(file_paths, read.csv) # 2. 批量处理每个表格 processed_list <- map(df_list, ~ .x %>% mutate(x3 = first(x1)) %>% slice(-(1:2)) %>% mutate(rowid = row_number()) %>% select(rowid, everything()) %>% relocate(rowid, .before = x1) %>% rename(` ` = rowid)) # 3. 将处理后的表格保存回文件(文件名前缀加processed_) walk2(processed_list, file_paths, ~ write.csv(.x, paste0("processed_", basename(.y)), row.names = FALSE))
核心逻辑说明
- 日期提取:所有表格的日期均位于
x1列第一行,用first(x1)直接获取 - 无效行过滤:统一剔除前两行(日期行和"Godzina"行)
- 批量效率:
purrr::map替代循环,代码简洁且处理速度更优,适合大规模表格处理 - 结果保存:
walk2一一对应原文件保存处理后的结果,便于后续复用
内容的提问来源于stack exchange,提问作者GrBa
相关产品推荐
相关产品推荐

