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

R语言如何将含多标识列的长格式数据转换为宽格式

R长表转宽表实现方案

你可以通过以下几种方式实现需求,之前使用spread()失败是因为该函数仅支持单个列作为生成列名的key,需要先拼接method和parameter两列,或使用更新的pivot_wider()函数直接指定多列生成列名:

方法1:使用tidyr::pivot_wider(推荐)

该函数为spread()的官方替代方案,原生支持多列组合生成列名:

# 加载包,tidyr版本需≥1.0.0
library(tidyr)

wide_data <- pivot_wider(
  mydata,
  id_cols = sample_ID, # 指定行唯一标识列
  names_from = c(method, parameter), # 指定用于生成列名的两个列
  names_sep = "_", # 指定列名拼接分隔符
  values_from = value # 指定取值来源列
)

输出结果完全符合你的要求,sample_ID为1的行将自动生成A_M1、B_M1、A_M2、B_M2四列,对应数值正确。

方法2:使用spread()实现

如果要继续使用spread(),需要先手动拼接生成key列:

library(tidyr)
library(dplyr)

wide_data <- mydata %>%
  mutate(col_key = paste(method, parameter, sep = "_")) %>% # 拼接生成列名
  select(sample_ID, col_key, value) %>%
  spread(key = col_key, value = value)

方法3:基础R原生reshape实现

无需加载第三方包的实现方式:

wide_data <- reshape(
  mydata,
  idvar = "sample_ID",
  timevar = c("method", "parameter"),
  direction = "wide",
  sep = "_"
)
# 去掉列名默认带的value_前缀
names(wide_data) <- sub("^value_", "", names(wide_data))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 10:36:04