如何根据特定列值添加行并相应地附加日期列

How to add rows based on a specific column value and append date column accordingly

目前我有一个如下所示的数据框:

   Months Total  Date
1  2      6      05/01/2021
2  5      10     18/06/2021

我想转换数据,以便将月份添加到“日期”,并将“总计”除以“月份”,为每个月提供一行,如下所示:

   Total  Date
1  3      05/01/2021
2  3      05/02/2021
3  2      18/06/2021
4  2      18/07/2021
5  2      18/08/2021
6  2      18/09/2021
7  2      18/10/2021

这是一种方法 -

  • Date改为日期class,这样更容易对其进行算术运算。
  • uncount 将每一行重复 Months
  • 对于每一行,将 Total 值除以该行的重复次数。
  • 每行日期增加 1 个月。
library(dplyr)
library(tidyr)
library(lubridate)

df %>%
  mutate(Date = dmy(Date), 
         row = row_number()) %>%
  uncount(Months) %>%
  group_by(row) %>%
  mutate(Total = Total/n(), 
         Date = Date %m+% months(row_number() - 1)) %>%
  ungroup %>%
  select(-row)

#   Total Date      
#  <dbl> <date>    
#1     3 2021-01-05
#2     3 2021-02-05
#3     2 2021-06-18
#4     2 2021-07-18
#5     2 2021-08-18
#6     2 2021-09-18
#7     2 2021-10-18