在R中如何自定义重塑Dataframe以获得目标格式?
解决方案
要实现你想要的格式,核心是先给每个Para分组内的Val添加序号标识,再进行重塑。下面提供两种常用实现方式:
方法1:使用reshape2包(你当前在用的包)
先给数据添加组内序号,再用dcast完成重塑:
library(reshape2) dat = data.frame('Para' = c('A', 'A', 'B', 'B', 'B'), 'Val' = c(.3, .45, .34, 12, 67)) # 给每个Para组内的Val生成序号(Val1、Val2...的基础) dat$id <- ave(1:nrow(dat), dat$Para, FUN = seq_along) # 执行重塑 dcast(dat, Para ~ paste0("Val", id), value.var = "Val")
运行结果:
Para Val1 Val2 Val3 1 A 0.3 0.45 NA 2 B 0.34 12.0 67.0
方法2:使用tidyverse工具包(语法更直观)
用dplyr分组生成序号,再用tidyr::pivot_wider完成重塑:
library(dplyr) library(tidyr) dat = data.frame('Para' = c('A', 'A', 'B', 'B', 'B'), 'Val' = c(.3, .45, .34, 12, 67)) dat %>% group_by(Para) %>% mutate(id = paste0("Val", row_number())) %>% pivot_wider(names_from = id, values_from = Val)
运行结果与方法1完全一致。
内容的提问来源于stack exchange,提问作者Brian Smith
相关产品推荐
相关产品推荐

