【发布时间】:2018-03-19 12:25:20
【问题描述】:
输入数据帧
ID RID PID check_in check_out 10240 1 1 13-08-2014 9.30 14-08-2014 9.30 10240 2 1 16-08-2014 9.30 17-08-2014 9.30 10240 3 2 18-09-2012 9.30 25-09-2012 9.30 10240 4 1 25-09-2012 9.30 30-09-2012 9.30 10240 5 1 27-01-2015 22.30 27-02-2015 20.30期待输出
ID RID PID check_in check_out Weekite Weekstart Weekgrp Days 10240 1 1 13-08-2014 9.30 14-08-2014 9.30 1 10-08-2014 10-08-2014 1 10240 2 1 16-08-2014 9.30 17-08-2014 9.30 1 10-08-2014 10-08-2014 1 10240 3 2 18-09-2012 9.30 25-09-2012 9.30 1 16-09-2012 16-09-2012 7 10240 4 1 25-09-2012 9.30 30-09-2012 9.30 1 23-09-2012 23-09-2012 5 10240 5 1 27-01-2015 22.30 27-02-2015 20.30 5 25-01-2015 25-01-2015 5 10240 5 1 27-01-2015 22.30 27-02-2015 20.30 5 25-01-2015 01-02-2015 7 10240 5 1 27-01-2015 22.30 27-02-2015 20.30 5 25-01-2015 08-02-2015 7 10240 5 1 27-01-2015 22.30 27-02-2015 20.30 5 25-01-2015 15-02-2015 7 10240 5 1 27-01-2015 22.30 27-02-2015 20.30 5 25-01-2015 22-02-2015 5但是我没有得到预期的输出。
下面是我的代码:
output_df <- weektest %>%
group_by(ID, RID,PID) %>%
mutate(Weekite = ceiling(difftime(strptime(check_out, format = "%Y-%m-%d"),
strptime(check_in, format = "%Y-%m-%d"),units="weeks"))) %>%
mutate(Weekstart = as.Date(cut(check_in,
breaks = "week",
start.on.monday = FALSE))) %>%
mutate(Weekgrp = list(seq(Weekstart[1], by="week", length.out=Weekite[1]))) %>%
unnest %>%
mutate(Days = if(n() > 1)
case_when(
row_number() == 1L ~ day(Weekgrp[2]) - day(check_in),
row_number() == n() ~ day(check_out) - day(Weekgrp[n()]),
row_number() != 1L | n() ~ day(Weekgrp[n()]) - day(Weekgrp[n()-1]),
)
else day(check_out)- day(check_in)
)
row_number() == 1L ~ day(Weekgrp[2]) - day(check_in) 行给出的 Days 错误为 -26。
请帮忙。
【问题讨论】:
-
您能否编辑您的问题以包含有关您要生成的变量的一些详细信息(即
Weekite、Weekstart、Weekgrp),而不是让我们根据你的代码。 -
@MauritsEvers 实际上我对 Weekgrp 很感兴趣,它为我提供了在给定日期范围和每周天数之间的一周开始日期。生成 Weekite 和 Weekstart 以获取 Weekgrp。它们不是必需的。
-
所以
Days只是check_out和check_in之间的时间差?我仍然不确定Weekgrp应该是什么。好像和Weekstart重合,但只针对部分条目? -
例如在 check_in 27-01-2015 和 check_out 27-02-2015 他们是 31 天。然而,这两个日期之间有 5 个不同的周。因此,如果我想查看这些日期范围之间的每周天数,那么我需要周数和天数。现在 27/01/2015 属于第 25/01/2015 周,因此本周的天数为 5。
-
您能否详细说明
weekgrp背后的逻辑?