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

如何在R中将多个气象数据Excel文件合并为单个数据框

解决方案

核心问题修正点

  • 原代码未将时间列转换为可排序的日期时间格式,导致合并后数据顺序混乱
  • 读取CSV时未处理逗号作为小数分隔符的问题,会导致温度/湿度数值被识别为字符型
  • Excel路径中的反斜杠需要转义(用\\)或改用正斜杠,否则会报错
  • 合并后需按时间列排序,同时保留重复时间的所有记录

完整修正代码

# 安装并加载所需包
# install.packages(c("openxlsx", "tidyverse"))
library(openxlsx)
library(tidyverse)

# 读取数据:设置dec=","处理逗号小数,header=FALSE匹配无表头的数据源
C_1_Maio <- read.csv(
  "D:/Carreira Acadêmica/Doutorado - UB/Projetos/HoliSoils/Areas de Estudo/Cadiretes/Dados/Sensores/2022-05-11/C-1.csv",
  header = FALSE, sep = ";", dec = ","
)

C_1_Junho <- read.csv(
  "D:/Carreira Acadêmica/Doutorado - UB/Projetos/HoliSoils/Areas de Estudo/Cadiretes/Dados/Sensores/2022-06-29/C-1.csv",
  header = FALSE, sep = ";", dec = ","
)

# 合并数据并处理时间列
C1_cad <- bind_rows(C_1_Maio, C_1_Junho) %>%
  # 将V2列的字符串转换为日期时间格式(适配"2021.07.02 11:00"格式)
  mutate(datetime = dmy_hm(V2, locale = locale(date_names = "pt"))) %>%
  # 按时间排序,保留所有重复时间的记录
  arrange(datetime)

# 拆分各变量数据集(重命名列让导出结果更直观)
cad_T1_C1 <- C1_cad %>% select(datetime, T1 = V4)
cad_T2_C1 <- C1_cad %>% select(datetime, T2 = V5)
cad_T3_C1 <- C1_cad %>% select(datetime, T3 = V6)
cad_H_C1 <- C1_cad %>% select(datetime, Moisture = V7)

# 导出到Excel的不同工作表
output_path <- "C:/Users/Lenovo/Desktop/Holisoils data/C1_TM_Cadiretes.xlsx"
write.xlsx(
  list(T1 = cad_T1_C1, T2 = cad_T2_C1, T3 = cad_T3_C1, Moisture = cad_H_C1),
  file = output_path,
  overwrite = TRUE
)

扩展优化:批量读取C1的所有月份文件

如果后续要处理更多月份(比如C1_Julho等),可以用批量读取简化代码:

# 列出C1所有数据文件的路径
c1_file_paths <- c(
  "D:/Carreira Acadêmica/Doutorado - UB/Projetos/HoliSoils/Areas de Estudo/Cadiretes/Dados/Sensores/2022-05-11/C-1.csv",
  "D:/Carreira Acadêmica/Doutorado - UB/Projetos/HoliSoils/Areas de Estudo/Cadiretes/Dados/Sensores/2022-06-29/C-1.csv",
  "D:/Carreira Acadêmica/Doutorado - UB/Projetos/HoliSoils/Areas de Estudo/Cadiretes/Dados/Sensores/2022-07-XX/C-1.csv" # 补充其他月份文件路径
)

# 批量读取并合并所有文件
C1_cad <- map_dfr(c1_file_paths, ~read.csv(.x, header=FALSE, sep=";", dec=",")) %>%
  mutate(datetime = dmy_hm(V2, locale = locale(date_names = "pt"))) %>%
  arrange(datetime)

关键说明

  • dmy_hm函数来自lubridate(tidyverse包含该包),用于将字符串转换为日期时间,locale="pt"适配葡萄牙语日期格式
  • bind_rows比rbind更灵活,支持不同列数的数据集合并
  • select重命名列(比如V4改为T1),让导出的Excel内容更易读
  • 保留重复时间记录:arrange仅做排序操作,不会删除任何重复时间的行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 11:57:23