R语言如何将重复字段行转换为表头列完成数据格式转换
R语言实现重复键值行转表头列的方法
该场景属于固定周期重复的键值对长表转标准宽表,核心逻辑是先给每条完整记录分组,再将键名映射为列名、对应值填充到单元格即可,以下是两种可直接运行的实现方案:
方案1:tidyverse 方案(适配性强,推荐)
该方案不依赖字段固定顺序,即使每组内字段排列顺序有波动也能正确匹配列。
library(tidyr) library(dplyr) # 此处替换为你实际读入数据的代码,例如raw_df <- read.table("your_file.txt", header = TRUE) raw_df <- data.frame( A = c("Barcode", "Instrument", "Date", "Barcode", "Instrument", "Date", "Barcode", "Instrument", "Date"), B = c("XYZ", "QS", "23/01/2022", "XTRR", "QS", "23/01/2022", "MKLL", "QS", "23/01/2022") ) # 数据转换 result <- raw_df %>% # 按单条记录的字段数(当前为3个字段/条)给每行分配所属记录ID mutate(record_id = (row_number() - 1) %/% 3 + 1) %>% # 长格式转宽格式:A列的字段名作为列名,B列的值作为单元格内容 pivot_wider(names_from = A, values_from = B) %>% # 移除辅助用的记录ID列 select(-record_id)
运行后输出结果完全匹配预期:
Barcode Instrument Date 1 XYZ QS 23/01/2022 2 XTRR QS 23/01/2022 3 MKLL QS 23/01/2022
方案2:基础R方案(无需安装第三方包)
适合不方便安装扩展包的环境,要求每组内的字段顺序完全一致。
# 此处替换为实际读入数据的代码 raw_df <- data.frame( A = c("Barcode", "Instrument", "Date", "Barcode", "Instrument", "Date", "Barcode", "Instrument", "Date"), B = c("XYZ", "QS", "23/01/2022", "XTRR", "QS", "23/01/2022", "MKLL", "QS", "23/01/2022") ) # 计算总记录条数 n_record <- nrow(raw_df) / 3 # 将值按行重组为矩阵,再转为数据框 result <- as.data.frame( matrix(raw_df$B, nrow = n_record, ncol = 3, byrow = TRUE) ) # 设置列名 colnames(result) <- c("Barcode", "Instrument", "Date")
注意:如果单条记录包含的字段数有变化,只需要把代码里的分组间隔值
3、对应列名替换为实际业务的字段数和字段名即可。
内容的提问来源于stack exchange,提问作者obraia
相关产品推荐
相关产品推荐

