R语言删除onewireviewer导出CSV多余行并批量合并iButton温度数据
报错原因说明
你遇到的报错是因为OneWireViewer导出的CSV前14行是单栏的设备元数据,默认读取时会被识别为仅1列,后续多列选择操作自然报错。
完整可运行代码
# 加载依赖包,未安装先运行 install.packages(c("tidyverse", "fs")) library(tidyverse) library(fs) # 配置参数,*请替换为你自己的本地路径* root_dir <- "./你存放所有点位文件夹的总目录路径" output_path <- "./合并后的iButton温度数据.csv" # 批量递归读取所有CSV,自动跳过前14行冗余内容 merged_data <- dir_ls(root_dir, recurse = TRUE, glob = "*.csv") %>% map_dfr( .f = function(path) { # 读取单个CSV,跳过前14行,关闭列类型提示 read_csv(path, skip = 14, show_col_types = FALSE) %>% # 新增溯源列:点位名称(所属文件夹名)、原始文件名 mutate( 点位名称 = basename(dirname(path)), 原始文件名 = basename(path) ) }, # 自动按列名对齐合并,列不一致时缺失值填NA .id = NULL ) # 导出合并结果 write_csv(merged_data, output_path, na = "") # 输出合并后数据概览 glimpse(merged_data)
关键配置说明
skip = 14:直接从第15行(真实表头行)开始读取,从根源解决仅识别到1列的报错recurse = TRUE:自动遍历总目录下所有子文件夹,无需手动逐个处理70个点位目录- 自动生成溯源列:保留每个数据行对应的点位和原始文件信息,避免后续数据核对时无法对应来源
异常排查
如果部分文件读取后列名错位,可单独测试单个文件的跳过行数:
# 替换为单个CSV的路径测试合适的skip值 test_data <- read_csv("单个测试文件路径.csv", skip = 14, show_col_types = FALSE) head(test_data)
如果测试显示表头仍为元数据,可将skip值调整为13或15,直到表头为温度、时间等真实列名即可。
内容的提问来源于stack exchange,提问作者Sara VDL
相关产品推荐
相关产品推荐

