У меня есть сотни тысяч записей со временем начала, временем окончания и типом активности для этого периода времени. Я хотел бы иметь возможность найти общее количество времени, которое совпадает с определенными, заданными интервалами времени и сгруппировать по типу деятельности.
Вот что у меня есть:
start stop activity
2015-12-24 12:55:00.000 2015-12-24 13:25:00.000 a
2015-12-24 13:45:00.000 2015-12-24 13:59:00.000 b
2015-12-24 13:55:00.000 2015-12-24 14:10:00.000 b
2015-12-24 14:13:00.000 2015-12-24 15:05:00.000 a
И вот пример того, что я хотел бы иметь в конечном результате. Это показано сгруппированным по получасу, но возможность указать любой нормальный временной интервал (день, час, полчаса, четверть часа) идеальна:
intervalStart activityMinutes activity
2015-12-24 12:30:00.000 5 a
2015-12-24 13:00:00.000 25 a
2015-12-24 13:30:00.000 19 b
2015-12-24 14:00:00.000 17 a
2015-12-24 14:00:00.000 10 b
2015-12-24 14:30:00.000 30 a
2015-12-24 15:00:00.000 5 a
У меня есть SQL-запрос, который очень хорошо подходит для этого, который я получил из предыдущего вопроса stackoverflow, который я опубликовал ранее в этом году:
Однако использование этого запроса в R очень громоздко и не всегда работает в зависимости от диапазона дат, на который я смотрю. Это также очень медленно, и я надеюсь, что решение с использованием R будет быстрее и надежнее.
Спасибо за помощь и дайте мне знать, если есть какая-либо другая информация, которую я могу предоставить!
РЕДАКТИРОВАТЬ - отредактировано для отображения результатов в интервалах времени с 30-минутным интервалом.
?difftime
- person Jaap   schedule 28.12.2015library(data.table) ; setDT(df)[, seq(start, stop, by = "min"), by = names(df)][, .N, by = .(as.IDate(V1), hour(V1), activity)]
, еслиstart
иstop
относятся к классуPOSIXct
, хотя я не ручаюсь за эффективность. - person David Arenburg   schedule 28.12.2015