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

如何将数据框单列值重排为不同名称的多列(R语言)

数据转换解决方案

使用tidyverse实现

适合熟悉dplyr/tidyr的用户,代码逻辑清晰:

library(tidyverse)

# 构造示例数据
df = data.frame(ID = c(1,1,1,2,2,2,2,2),
                treatment = c('AB','CD','EF','AB','CD','GH','IM','LN') )

# 转换为宽格式
df_wide <- df %>%
  group_by(ID) %>%
  # 给每个ID内的treatment按顺序生成列名后缀
  mutate(treatment_col = paste0("treatment_", row_number())) %>%
  # 转宽,将treatment_col作为列名,treatment作为值
  pivot_wider(names_from = treatment_col, values_from = treatment) %>%
  ungroup()

print(df_wide)

使用data.table实现

针对数千个ID的大数据量,data.table的运算效率更高:

library(data.table)

# 构造示例数据
df = data.frame(ID = c(1,1,1,2,2,2,2,2),
                treatment = c('AB','CD','EF','AB','CD','GH','IM','LN') )

# 转换为data.table格式
setDT(df)
# 转宽,rowid(ID)生成每个ID内的行序号,作为列名后缀
df_wide <- dcast(df, ID ~ paste0("treatment_", rowid(ID)), value.var = "treatment")

print(df_wide)

关键逻辑说明

核心是在每个ID分组内生成连续的序号,以此作为宽格式列名的后缀。这样每个ID的treatment会按自身顺序填充到对应的treatment_1、treatment_2等列中,不足的位置自动补<NA>,避免了错误结果中跨ID错位填充的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:25:16