使用cut函数将日期时间按照小于1秒的间隔分组

3

在 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毫秒,我不能用同样的方法。
例如,以下代码会抛出错误: 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
https://dev59.com/RZ3ha4cB1Zd3GeqPZsgj - M--
@Masoud 谢谢,我会研究一下。我猜用 dplyr 是不可能的... - guy
你可以使用 dplyr,但仍需要与之提出的 xts 或其他方法一起使用。dplyr 本身不支持你所需的功能。即使是你原来针对大于1秒的时间间隔的解决方案也使用了 base 中的 cut 函数。 - M--
1个回答

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))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接