R语言中如何重塑计算后的DataFrame以实现目标宽格式输出?
长格式转指定宽格式的实现方案
完整代码流程
从原始数据定义到最终格式转换的全流程如下:
# 1. 定义原始数据框 Category = c("New", "Fixed", "Regular") `Jan 2014` = c(-418518172, 24425087, 0.3016606) `Feb 2014` = c(-168947846, 17919651, -0.7212493) `Mar 2014` = c(-168846, 17544, -0.775493) df1 <- data.frame(Category, `Jan 2014`, `Feb 2014`, `Mar 2014`, check.names = FALSE) Category = c("New", "Fixed", "Regular") `Jan 2014` = c(-8172, -8524, 0.5060900) `Feb 2014` = c(-1686, 19929, -0.85059894) `Mar 2014` = c(-2424246, 1232324, -0.7217593) df2 <- data.frame(Category, `Jan 2014`, `Feb 2014`, `Mar 2014`, check.names = FALSE) # 2. 计算目标百分比列 calculate_df <- cbind(df1, (df1[-1]/df2[-1])*100) # 可选:重命名计算列,避免与原始列混淆 colnames(calculate_df) <- c("Category", "Jan 2014_raw", "Feb 2014_raw", "Mar 2014_raw", "Jan 2014_calc", "Feb 2014_calc", "Mar 2014_calc") # 3. 转为长格式(对应当前输出) library(tidyr) long_df <- calculate_df %>% select(Category, ends_with("_calc")) %>% # 仅保留计算后的数据 pivot_longer( cols = -Category, names_to = "Date", values_to = "Values", names_prefix = "(.*)_calc" # 提取纯日期名称 ) # 4. 重塑为目标宽格式:分类为行,日期为列 wide_df <- long_df %>% pivot_wider( names_from = Date, values_from = Values )
关键说明
- 若已得到包含
Category、Date、Values的长格式数据,直接执行最后一步pivot_wider即可生成目标宽格式。 - 最终输出的
wide_df结构:每行对应一个分类(New/Fixed/Regular),每列对应一个日期,单元格值为计算后的百分比结果。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

