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
相关产品推荐
相关产品推荐

