如何根据特定列值添加行并相应地附加日期列
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
目前我有一个如下所示的数据框:
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