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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:18:20