You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将含年度聚合值的行拆分为月度值行(R语言实现)

解决方案:将年度数据拆分为月度行

你可以用dplyr和lubridate包来轻松实现这个需求,步骤直观清晰:先把每一行重复12次对应12个月,再生成每个月的日期,最后将Total列的年度值平均分配到每个月。

完整代码示例

library(readr)
library(dplyr)
library(lubridate)

# 读取你的数据
myData = read_delim("Date,b,c,d,Total\n2018,NA,NA,NA,12\n2018,0.5,0.5,NA,24\n2018,0.3,NA,0.5,36\n", delim=",")

# 拆分年度行到月度
monthly_data <- myData %>%
  # 每行重复12次,同时生成标记月份的临时列
  uncount(weights = 12, .id = "month") %>%
  # 生成每个月第一天的日期格式
  mutate(Date = make_date(Date, month, 1)) %>%
  # 将年度总计值平均分配到每个月
  mutate(Total = Total / 12) %>%
  # 移除临时的月份标记列(可选操作)
  select(-month)

# 查看第一行拆分后的12个月数据
head(monthly_data, 12)

代码分步解释

  • uncount(weights = 12, .id = "month"):把每一行复制12份,同时生成month列记录1-12的月份序号,方便后续生成日期。
  • make_date(Date, month, 1):结合原数据的年份、生成的月份序号,创建每个月第一天的标准日期(比如2018-01-01)。
  • mutate(Total = Total / 12):将年度总计值除以12,得到月度平均分配值。

对应第一行的输出结果

# A tibble: 12 x 5
   Date           b     c     d Total
   <date>     <dbl> <dbl> <dbl> <dbl>
 1 2018-01-01    NA    NA    NA     1
 2 2018-02-01    NA    NA    NA     1
 3 2018-03-01    NA    NA    NA     1
 4 2018-04-01    NA    NA    NA     1
 5 2018-05-01    NA    NA    NA     1
 6 2018-06-01    NA    NA    NA     1
 7 2018-07-01    NA    NA    NA     1
 8 2018-08-01    NA    NA    NA     1
 9 2018-09-01    NA    NA    NA     1
10 2018-10-01    NA    NA    NA     1
11 2018-11-01    NA    NA    NA     1
12 2018-12-01    NA    NA    NA     1

关于之前Stack Overflow方案无效的可能原因

你提到的那篇回答大概率是针对按类别拆分聚合行的场景,而你的需求是按时间维度(月份)拆分,数据结构和拆分逻辑完全不同,所以直接套用不生效。上面的方案是针对你的时间拆分需求专门设计的,应该能完美解决问题。

内容的提问来源于stack exchange,提问作者nh_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 09:03:41