R - 使用cut at<组的日期时间。 1秒间隔

时间:2017-12-04 14:14:45

标签: r datetime

在R中,我能够使用cut函数按日期时间对数据进行分组,以在时间间隔组中划分日期时间。

要创建几分之一秒的日期时间数据,可以使用as.POSIXct(nanotime::nanotime(1112089999201723886))

等纪元时间戳来完成

以下是一些玩具数据:

times = c(as.POSIXct(nanotime::nanotime(1112089999201723886)), as.POSIXct(nanotime::nanotime(1112089999201724886)), as.POSIXct(nanotime::nanotime(1112089999201725886)), as.POSIXct(nanotime::nanotime(1112089999201726886)), as.POSIXct(nanotime::nanotime(1112089999201727886))), as.POSIXct(nanotime::nanotime(1112089999201728886)))

x=c(5,6,7,8,9,10)

y=c('F','A','T','P','O','O')

以表格格式:

data
# A tibble: 9,188 x 3
              datetime      x             y
                <dttm>  <dbl>         <chr>
 1 2000-12-31  5:00:00      5             F
 2 2000-12-31  5:00:00      6             A
 3 2000-12-31  5:00:00      7             T
 4 2000-12-31  5:00:00      8             P
 5 2000-12-31  5:00:00      9             O
 6 2000-12-31  5:00:00     10             O

例如,这有效:

data %>% group_by(time_group=cut(datetime, "1 sec")) %>% summarise(count=n())

但是,如果我想按小于一秒的时间间隔进行分组,例如半秒,或十分之一秒,或50毫秒,我就不能以同样的方式进行分组。

E.g。这些抛出错误:

data %>% group_by(time_group=cut(datetime, "0.5 sec")) %>% summarise(count=n())

data %>% group_by(time_group=cut(datetime, "1 ms")) %>% summarise(count=n())

我该如何做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以将亚秒时间转换为整数,并像这样计算您想要的休息次数:

interval_in_secs <- 0.250
interval_in_secs_cut_breaks <- ( max(as.numeric(df$timestamp)) - min(as.numeric(df$timestamp)) ) / interval_in_secs
df %>%
  mutate(timestamp_ms_int = 1000*as.integer(timestamp)) %>%
  group_by(timestamp = cut(timestamp_ms_int, interval_in_secs_cut_breaks))