如何按时间间隔和列值对R数据帧进行分组?

时间:2018-01-14 16:11:35

标签: r

我有一个数据集,它是特定设施发生事件的时间列表:

> head(facility_events);
facility_id          event_time
1   20248 2018-01-01 00:00:01
2   12445 2018-01-01 00:00:04
3   20248 2018-01-01 00:00:08
4   17567 2018-01-01 00:00:47
5   17567 2018-01-01 00:03:50
6   10459 2018-01-01 00:04:01

我想通过按设施对数据进行分组并将事件分组为3分钟的间隔来生成具有总和的数据帧。输出看起来像这样:

count facility interval
2      20248   0 
1      12445   0
1      17567   0
1      17567   1
1      10459   1

你如何在R中完成这项工作?

2 个答案:

答案 0 :(得分:5)

您可以将tidyverselubridate一起使用:

df <- data.frame(facility_id = c(20248, 12445, 20248, 17567, 17567, 10459),
                 event_time = as.POSIXct(c("2018-01-01 00:00:01", "2018-01-01 00:00:04", "2018-01-01 00:00:08", "2018-01-01 00:00:47", "2018-01-01 00:03:50", "2018-01-01 00:04:01")))

library(tidyverse)

df %>%
    mutate(interval = lubridate::minute(event_time) %/% 3) %>%
    group_by(facility_id, interval) %>%
    summarise(count = n())

# A tibble: 5 x 3
# Groups: facility_id [?]
  facility_id interval count
        <dbl>    <int> <int>
1       10459        1     1
2       12445        0     1
3       17567        0     1
4       17567        1     1
5       20248        0     2

答案 1 :(得分:3)

以下是transpose()的解决方案。相同的逻辑:

  • 创建间隔组
  • 由该小组总结(统计)

这是一个带有data.table简洁语法的单行。

data.table

reprex package(v0.1.1.9000)于2018-01-14创建。