【发布时间】:2021-06-02 06:00:17
【问题描述】:
尝试在 R 编程(使用 lubridate)中生成具有给定开始日期和频率的日期的日期序列不是数值,而是日期可能发生的天数。
给定下表,其中定义了组、开始日期、日期和发生标志
+-------+------------+-----+-----+
| Group | start_date | Day | Y/N |
+-------+------------+-----+-----+
| foo | 02-06-2021 | Mon | 0 |
| foo | 02-06-2021 | Tue | 1 |
| foo | 02-06-2021 | Wed | 0 |
| foo | 02-06-2021 | Thu | 1 |
| foo | 02-06-2021 | Fri | 1 |
| foo | 02-06-2021 | Sat | 1 |
| foo | 02-06-2021 | Sun | 0 |
| bar | 02-06-2021 | Mon | 1 |
| bar | 02-06-2021 | Tue | 0 |
| bar | 02-06-2021 | Wed | 0 |
| bar | 02-06-2021 | Thu | 1 |
| bar | 02-06-2021 | Fri | 1 |
| bar | 02-06-2021 | Sat | 0 |
| bar | 02-06-2021 | Sun | 0 |
+-------+------------+-----+-----+
需要的输出如下。
+-------+------------+---------------------+
| Group | given_date | next_available_date |
+-------+------------+---------------------+
| foo | 02-06-2021 | 03-06-2021 |
| foo | 04-06-2021 | 04-06-2021 |
| foo | 06-06-2021 | 08-06-2021 |
| bar | 02-06-2021 | 03-06-2021 |
| bar | 05-06-2021 | 07-06-2021 |
+-------+------------+---------------------+
关于while循环的一些想法,我认为可能会很累。
for each given_date{
inputdate = given_date
while(true){
{
if(group =="Foo" & day(inputdate) in ('Tue','Thu','Fri','Sat')
next_available_date=inputdate
break
}
else
{
inputdate = inputdate+(1 day) (repeat the loop until if condition is satisfied)
}
}
}
如果不同组的条件可能不同。
无法弄清楚如何利用不均匀的频率来获取下一个可用日期。
【问题讨论】:
-
你能解释一下输出吗?
Day代表什么?Y/N是什么?另外你如何计算given_date和next_available_date? -
Y/N 是我们将确定日期是否可以发生的标志基础,例如:对于 foo 和给定日期 02-06-2021 即星期三,下一个可用日期不能结婚因为 Y/N 列对星期三为 0,下一个可用日期将是 03-06-2021,即周四和 Y/N = 1,同样的情况将适用于 05-06-2021 酒吧,但从 Y/N分别标记 sat 和 sun 0,0 因此下一个可用日期将落在 07-06-2021
-
抱歉,如果不清楚,stackoverflow 的新手
-
是的,组的开始日期将保持不变
-
肯定会这样做
标签: r datetime dplyr lubridate