R语言:基于Type列创建QTY/unit衍生列并实现宽表转换
长格式转宽格式(多变量扩展)解决方案
不用折腾循环创建衍生列,用tidyverse里的pivot_wider就能一步搞定你的需求,代码简洁高效还不容易出错:
1. 先复现原始数据(方便你测试)
library(tidyverse) df <- tibble( Id = c(1,2,3,2,3,1), Type = c("A","B","C","A","B","C"), QTY = c(5,10,5,10,5,10), unit = c(1,2,3,4,5,6) )
2. 核心转换代码
df2 <- df %>% pivot_wider( id_cols = Id, # 按Id分组聚合 names_from = Type, # 用Type的取值作为新列前缀 values_from = c(QTY, unit), # 需要扩展的两个变量 names_glue = "{Type}_{.value}", # 定义新列名格式:Type_原列名 values_fill = 0 # 缺失值自动填充0 ) %>% arrange(Id) # 按Id排序,和目标结果一致
代码说明
names_glue参数自动生成A_QTY、A_unit这类符合要求的列名,省去手动写循环创建列的麻烦values_fill = 0直接把每个Id缺失的Type对应的QTY和unit值补0,不用后续单独处理缺失值- 运行后得到的
df2完全匹配你想要的宽格式数据表结构
内容的提问来源于stack exchange,提问作者Fernando Zavala
相关产品推荐
相关产品推荐

