【发布时间】:2017-10-16 10:48:42
【问题描述】:
关于这个问题: Sum if the date difference is smaller than a value 感谢@Davis Vaughan,现在我可以计算前 12 小时内发生的事件数量:
df <- tribble(
~fechayhora, ~id, ~tipo,
"2017-03-17 08:03:00", "A", "APF",
"2017-05-17 10:34:00", "A", "APF",
"2017-05-17 12:52:00", "A", "APF",
"2017-05-17 08:52:00", "A", "APP",
"2017-05-17 10:52:00", "A", "APP",
"2017-05-17 10:46:00", "B", "APP",
"2017-05-17 14:23:00", "B", "APP",
"2017-05-17 17:29:00", "B", "APF"
)
df <- df %>%
mutate(fechayhora = as.POSIXct(fechayhora),
minus_12 = fechayhora - hours(12))
df <- df %>% mutate(
number_of_APF_12h = map2_dbl(.x = fechayhora,
.y = minus_12,
.f = ~sum(between(df$fechayhora, .y, .x)) -
1))
然后我尝试做同样的事情,但按“id”和“tipo”(类型)分组。我试过数据表和数据框,没有成功:
df=df[,number_of_failures_12h = map2_dbl(.x = fechayhora,
.y = minus_12,
.f = ~sum(between(df$fechayhora, .y, .x)) -
1)),by=.(tipo,id)]
或
df <- df %>%
group_by(id,tipo)
%>% mutate(
number_of_failure = map2_dbl(.x = fechayhora,
.y = minus_12,
.f = ~sum(between(df$fechayhora, .y, .x)) -
1)) %>%
ungroup()
预期结果:
fechayhora id tipo n_APP n_APF
"2017-03-17 08:03:00", "A", "APF", 0 0
"2017-05-17 10:34:00", "A", "APF", 0 1
"2017-05-17 12:52:00", "A", "APF", 0 2
"2017-05-17 08:52:00", "A", "APP", 0 2
"2017-05-17 10:52:00", "A", "APP", 1 2
"2017-05-17 10:46:00", "B", "APP", 0 0
"2017-05-17 14:23:00", "B", "APP", 1 0
"2017-05-17 17:29:00", "B", "APF" 0 0
谢谢!!
【问题讨论】:
-
对不起,有很多猜测
-
如果你想告诉我有什么不清楚的地方谢谢
-
你是如何使用 dplyr 获得预期输出的,因为我无法获得
-
这是我想要做的,因为它不起作用:df=df[,number_of_failures_12h = map2_dbl(.x = fechayhora, .y = minus_12, .f = ~sum(between (df$fechayhora, .y, .x)) - 1)),by=.(tipo,id)]
-
ahhh ...我手工编写的预期输出,我无法使用数据表获得它,也无法使用 dplyr :(
标签: r dataframe time datatable purrr