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

如何在R语言中将含重复行的数据框转换为新增唯一标识列的格式?

数据框行转列解决方案

需求说明

将包含重复名称行的长格式数据框,转换为以唯一名称为行、各对应值为列的宽格式数据框,无需硬编码行数,适配名称顺序变化的场景。

原始数据示例

df <- data.frame(matrix(nrow = 20, ncol = 2))
df[1:10,1] <- c("HeaderStart","LevelName","Experiment","SessionTime",
              "Subject","Session","ImgPath","RandomSeed",
              "DisplayRefreshRate","Level")

df[11:20,1] <- c("HeaderStart","LevelName","Experiment","SessionTime",
               "Subject","Session","ImgPath","RandomSeed",
               "DisplayRefreshRate","Level")

df[1:10,2] <- seq(1,10,1)
df[11:20,2] <- seq(1,10,1)

方法一:使用tidyverse工具包

适合需要灵活数据处理的场景,代码简洁易读:

library(tidyverse)

df_result <- df %>%
  group_by(X1) %>%
  mutate(col_num = paste0("X", row_number() + 1)) %>%
  ungroup() %>%
  pivot_wider(names_from = col_num, values_from = X2) %>%
  arrange(match(X1, df$X1[!duplicated(df$X1)]))

代码解释

  • group_by(X1):按名称分组,确保每个名称的所有对应值被归为一组
  • mutate(...):为每组内的行生成新列名,自动适配分组数量
  • pivot_wider:将长表转为宽表,实现行转列
  • arrange(...):可选步骤,保留名称在原始数据中首次出现的顺序

方法二:基础R实现

无需额外安装包,适合轻量处理:

# 获取唯一名称
unique_names <- unique(df$X1)
# 提取每个名称对应的所有值
value_list <- lapply(unique_names, function(x) df$X2[df$X1 == x])
# 组合为数据框
df_result_base <- data.frame(X1 = unique_names, do.call(cbind, value_list))
# 重命名列
colnames(df_result_base) <- c("X1", paste0("X", 2:(ncol(df_result_base))))
# 按原始顺序排序
df_result_base <- df_result_base[match(unique_names, df$X1[!duplicated(df$X1)]), ]

效果验证

两种方法运行后均会生成目标格式的数据框:

X1 X2 X3
1         HeaderStart  1  1
2           LevelName  2  2
3          Experiment  3  3
4         SessionTime  4  4
5             Subject  5  5
6             Session  6  6
7             ImgPath  7  7
8          RandomSeed  8  8
9  DisplayRefreshRate  9  9
10              Level 10 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 11:24:55