[英]sum if the time difference is smaller than the value by id and by type
關於此問題: 如果日期差小於某個值,則求和現在,由於有了@Davis Vaughan,我現在可以計算在過去12h中發生的事件數:
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
謝謝!!
必須有一種更經典的方法,但是應該這樣做:
# Auxiliary function
count_failures <- function(group, last_12, rowid, type) {
group[1:rowid-1, ] %>%
filter(tipo %in% type & fechayhora >= last_12) %>%
nrow()
}
split_by_group <- df %>%
group_by(id) %>%
do(data = (.)) %>%
select(data) %>%
map(identity) %>%
.[[1]]
df_s <- split_by_group %>%
map(arrange, fechayhora) %>%
map(.f = function(x) {
x %>%
rowid_to_column() %>%
rowwise() %>%
mutate(n_APP = count_failures(x, minus_12, rowid, "APP"),
n_APF = count_failures(x, minus_12, rowid, "APF")) %>%
ungroup() %>%
select(-rowid)
}) %>%
bind_rows()
輸出:
# A tibble: 8 x 6
fechayhora id tipo minus_12 n_APP n_APF
<dttm> <chr> <chr> <dttm> <int> <int>
1 2017-03-17 08:03:00 A APF 2017-03-16 20:03:00 0 0
2 2017-05-17 08:52:00 A APP 2017-05-16 20:52:00 0 0
3 2017-05-17 10:34:00 A APF 2017-05-16 22:34:00 1 0
4 2017-05-17 10:52:00 A APP 2017-05-16 22:52:00 1 1
5 2017-05-17 12:52:00 A APF 2017-05-17 00:52:00 2 1
6 2017-05-17 10:46:00 B APP 2017-05-16 22:46:00 0 0
7 2017-05-17 14:23:00 B APP 2017-05-17 02:23:00 1 0
8 2017-05-17 17:29:00 B APF 2017-05-17 05:29:00 2 0
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.