gpt4 book ai didi

r - 按月拆分日期期间并在必要时添加行

转载 作者:行者123 更新时间:2023-12-05 00:14:49 24 4
gpt4 key购买 nike

我有一张 table :

Name| Start     | Finish    |
----|-----------|-----------|
A |2015-01-22 |2015-02-04 |
B |2015-01-02 |2015-01-10 |
A |2015-01-22 |2015-02-14 |
B |2015-01-02 |2015-02-10 |

我需要按月休息。如果一个时期从一个月开始并在下一个月结束,那么我需要将它分成两个时期。如果一个时期在同一个月开始和结束,那么它应该是这样。让我们假设 period 不能包含超过一个月的第 1 天。换句话说,每条线可以拆分为不超过两条线。完成(周期结束)总是大于开始。

这就是我想要得到的:
Name| Start     | Finish    |
----|-----------|-----------|
A |2015-01-22 |2015-01-31 |
A |2015-02-01 |2015-02-04 |
A |2015-01-22 |2015-01-31 |
A |2015-02-01 |2015-02-14 |
B |2015-01-02 |2015-01-10 |
B |2015-01-02 |2015-01-31 |
B |2015-02-01 |2015-02-10 |

输出行的顺序无关紧要。

这是表的代码:
Name = c("A", "B", "A", "B")
Start = c(as.Date("2015-01-22"), as.Date("2015-01-02"), as.Date("2015-01-22"), as.Date("2015-01-02"))
Finish = c(as.Date("2015-02-04"), as.Date("2015-01-10"), as.Date("2015-02-14"), as.Date("2015-02-10"))
df = data.frame(Name, Start, Finish)

任何建议如何做到?

最佳答案

这是基 R 中的另一种方法:

idx <- with(df, format(Finish, "%Y-%m") > format(Start, "%Y-%m"))

rbind(df[!idx,],
transform(df[idx,], Finish = as.Date(paste0(format(Finish, "%Y-%m"), "-01"))-1),
transform(df[idx,], Start = as.Date(paste0(format(Finish, "%Y-%m"), "-01"))))

# Name Start Finish
#2 B 2015-01-02 2015-01-10
#1 A 2015-01-22 2015-01-31
#3 A 2015-01-22 2015-01-31
#4 B 2015-01-02 2015-01-31
#11 A 2015-02-01 2015-02-04
#31 A 2015-02-01 2015-02-14
#41 B 2015-02-01 2015-02-10

关于r - 按月拆分日期期间并在必要时添加行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46185346/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com