数据框架由每个登录事件的case_number(chr)、onboarding_date Y-m-d和raised_at [Y-m-d h:m:s](POSIX ct)组成。我正在寻找一种方法来计算在入职日期和入职后13周(或91天)之间发生的登录事件(raised_at)的数量。
log_df <- data.frame(
case_number = c("000920", "000920", "000920", "000920", "000921", "000921"),
onboarding_date = as.Date(c("2020-10-27", "2020-10-27", "2020-10-27", "2020-10-27", "2020-11-08", "2020-11-08")),
raised_at = as.POSIXct(c("2020-10-27 02:52:31", "2020-10-27 05:40:51", "2020-10-27 05:46:25", "2020-10-28 09:05:21", "2020-11-08 23:39:15", "2020-11-11 00:19:16"))
)
字符串
我相信我需要创建一个interval对象,但我在这方面很新:
int <- interval(ymd("2001-01-01"), ymd("2002-01-01"))
interval = int_shift(int, duration(days = 91))
型
我不知道下一步该怎么办。
我现在是否可以创建一个表,使用onboarding_date+interval仅包含raised_at事件,以排除91天关注窗口之外的案例?然后用group_by(case_number)计数raised_at?
我在下一个部分被卡住了,困惑了自己:
log_df %>%
group_by(case_number) %>%
mutate(interval = onboarding_date - min(onboarding_date) < 91,
count_events = sum(raised_at) >= 1,
event_within_interval = if_else(interval & count_events,
1, 0)) %>%
ungroup()
型
它不工作,我似乎不能使它工作。mutate()
中的错误:
!计算count_events = sum(raised_at) >= 1
时出错。i组1中发生错误:case_number =“ACU0000920”。Summary.POSIXct()
中的错误导致:!'sum'未为“POSIX”对象定义
我知道它不能计算POSIXct日期,但我不知道如何修复我的代码中的这个错误,使其工作。我肯定错过了一些显而易见的东西。如果你能帮助我看到我错过了什么,我真的很感谢你对刚刚起步的人的明智建议。
2条答案
按热度按时间cmssoen21#
您可以像这样以天为单位测量间隔。在这个阶段不需要分组,从数据的外观来看,因为
onboarding_date
看起来是常数case_number
。不分组比较快。字符串
然后简单地计算每组有多少人:
型
您的样本数据没有任何间隔超过91天的情况,但在您的真实的数据中,这应该提供您所要求的。我使用了
dplyr
语法,就像您在这里使用它一样。但是,要在base R中执行类似的操作,您可以执行以下操作:型
k3fezbri2#
这应该可以!
字符串