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

R语言如何将长格式dataframe转置展开为每行对应单个人员的宽表

实现方法

方法1:使用tidyverse套件(推荐)

你之前转换失败的核心原因是缺少为每个ID下的两条记录生成序列标识的步骤,pivot_wider(原spread的升级版)需要该标识作为列名生成依据,代码如下:

# 加载依赖包
library(tidyverse)

# 转换逻辑
df_wanted <- df %>%
  group_by(ID) %>%
  # 为同个ID下的记录生成1、2的序号,拼接为Use1、Use2的列名
  mutate(use_col = paste0("Use", row_number())) %>%
  ungroup() %>%
  # 长表转宽表
  pivot_wider(names_from = use_col, values_from = Use) %>%
  # 将ID列设为行名
  column_to_rownames("ID")

运行后输出的df_wanted完全符合预期:

Use1 Use2
Tom     F    T
Ana     T    F
Lena    T    T

方法2:使用base R实现(无需安装额外包)

如果不想依赖第三方包,可以用base R的reshape函数实现:

# 生成同ID下的序列标识
df$time <- ave(df$ID, df$ID, FUN = seq_along)
# 长表转宽表
df_wide <- reshape(df, idvar = "ID", timevar = "time", direction = "wide")
# 设置行名并清理多余列
rownames(df_wide) <- df_wide$ID
df_wanted <- df_wide[, -1, drop = FALSE]
# 修改列名为要求的格式
colnames(df_wanted) <- c("Use1", "Use2")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:36:02