如何在R中执行Pivot操作并保留数据框的其余列
解决方法
你可以用tidyr包的pivot_wider或者data.table包的dcast实现需求,核心是明确指定需要保留的分组列(ID_A和Value_B),避免丢失信息。
先构造输入数据框
df <- data.frame( ID_A = c(1,1,2,2), Value_A = c(0.2, 0.1, 0.5, -0.3), Boolean = c(1,0,1,0), Value_B = c(-2,-2,1,1) )
方法1:使用tidyr::pivot_wider
通过id_cols指定保留的行标识列,names_from和values_from分别指定拆分依据列和取值列,names_glue自定义输出列名:
library(tidyr) df_wide <- pivot_wider( df, id_cols = c(ID_A, Value_B), # 将这两列作为行的唯一标识 names_from = Boolean, # 基于Boolean列拆分列 values_from = Value_A, # 取值来源为Value_A列 names_glue = "Value_A_Boo_{Boolean}" # 设置输出列的命名格式 )
方法2:使用data.table::dcast
通过公式指定行分组列(ID_A + Value_B)和列名规则,value.var指定取值列:
library(data.table) setDT(df) df_wide <- dcast( df, ID_A + Value_B ~ paste0("Value_A_Boo_", Boolean), value.var = "Value_A" )
两种方法都会得到你需要的输出数据框,关键是确保把ID_A和Value_B都纳入分组/行标识,这样就不会丢失这些列的信息。
内容的提问来源于stack exchange,提问作者dlwhch
相关产品推荐
相关产品推荐

