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

R语言中如何重塑数据实现行转列的格式转换?

R语言实现该数据重塑的方法

你需要做的是将长格式数据按Item Number的取值拆分为独立列,同个Item下的销售额按原始出现顺序纵向排列,实现代码如下:


方法1:tidyverse 方案(主流推荐)

先加载依赖包,构造原始数据,再通过分组加序号、长转宽两步得到结果:

# 加载需要的包
library(dplyr)
library(tidyr)

# 先构造你的原始数据集
raw_df <- data.frame(
  `Item Number` = c(50, 50, 60, 60, 70, 70),
  `Sales in Dollars` = c(10, 15, 20, 30, 35, 45),
  check.names = FALSE
)

# 重塑操作
res <- raw_df %>%
  group_by(`Item Number`) %>%
  # 给每个Item下的记录加组内行号,对应最终结果的行位置
  mutate(rn = row_number()) %>%
  ungroup() %>%
  # 长表转宽表
  pivot_wider(
    names_from = `Item Number`,
    values_from = `Sales in Dollars`
  ) %>%
  # 移除辅助用的行号列,设置行名
  select(-rn) %>%
  `rownames<-`(1:nrow(.))

运行后打印res就能得到你要的结果:

50 60 70
1 10 20 35
2 15 30 45

方法2:基础R方案(无需安装第三方包)

如果不想加载额外包,直接用基础R的拆分合并函数就能实现:

# 按Item Number拆分销售额向量
sales_split <- split(raw_df$`Sales in Dollars`, raw_df$`Item Number`)
# 按列合并为数据框
res_base <- as.data.frame(do.call(cbind, sales_split))
# 设置行名
rownames(res_base) <- 1:nrow(res_base)

输出结果和上面完全一致。

注意:以上两种方法默认每个Item Number对应的记录条数相同,和你给出的示例结构一致;如果不同Item的记录数不一致,pivot_wider会自动给缺失位置填充NA,基础R方法需要额外做补值处理。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:15:32