R语言批量读取CSV后按参数值转宽表、删列及排序方法求助
R语言批量处理CSV长表转宽表实现方案
前置依赖
提前安装并加载以下工具包即可:
library(data.table) library(purrr) library(dplyr) library(tidyr)
完整实现步骤
1. 批量读取合并CSV文件
原有批量读取逻辑基本可用,补充小数点参数适配数据中逗号作为小数分隔符的格式,避免数值被读成字符串:
# 替换为你自己的文件存储路径 setwd("C:/Users/directory") # 批量读取目录下所有csv文件并合并为统一数据框 merged_tbl <- list.files(pattern = "*.csv") %>% map_df(~fread(., dec = ","))
2. 长表转宽表
直接以ParametersName列为列名来源、ParametersValue为值来源做宽表转换,后续新增CSV里如果出现新的参数名,会自动生成对应新列,无需手动修改代码:
wide_tbl <- merged_tbl %>% pivot_wider( names_from = ParametersName, values_from = ParametersValue )
3. 删除不需要的列
用select函数,列名前加-即可删除对应列,多列删除用逗号分隔:
# 示例:删除ExamTitle列,替换为你实际需要删除的列名即可 wide_tbl <- wide_tbl %>% select(-ExamTitle) # 多列删除示例:select(-ExamTitle, -其他要删的列名)
4. 按指定列排序
用arrange函数实现排序,默认升序,需要降序时给列名套desc()即可:
# 示例:按TrunkLenght_VPDM_SAG列升序排序,替换为你实际需要排序的列名 wide_tbl <- wide_tbl %>% arrange(TrunkLenght_VPDM_SAG) # 降序示例:arrange(desc(TrunkLenght_VPDM_SAG))
测试数据对照实现
你提供的测试样例转换逻辑和上述流程一致,对应代码如下,运行结果和你给出的预期输出完全匹配:
# 构造测试数据 name1<-c("one", "two", "three", "four", "five") name2<-c(1:5) name3<-c(LETTERS[1:5]) name4<-c(letters[6:10]) df<-data.frame(name1, name2, name3,name4) # 转换实现 df_result <- df %>% select(-name4) %>% # 删除不需要的name4列 pivot_longer(cols = -name3, names_to = "tmp_col", values_to = "val") %>% pivot_wider(names_from = name3, values_from = val) %>% select(-tmp_col)
注意事项
- 读取文件时添加的
dec=","参数专门适配样例中-0,49这类逗号作为小数点的数值格式,避免读入后字段类型异常无法计算 - 所有删列、排序步骤的列名直接替换为实际业务需要的字段即可,核心转换逻辑不需要调整
- 如果同一个ExamTitle下存在重复的参数名,转换时会自动把值存为列表格式,提前确认源数据无重复参数即可避免该问题
内容的提问来源于stack exchange,提问作者Fede R
相关产品推荐
相关产品推荐

