如何在R中每n分钟分组时间

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (34)

我有一个包含大量时间序列的数据框:

1   0:03    B   1
2   0:05    A   1
3   0:05    A   1
4   0:05    B   1
5   0:10    A   1
6   0:10    B   1
7   0:14    B   1
8   0:18    A   1
9   0:20    A   1
10  0:23    B   1
11  0:30    A   1

我想将时间序列分组到每6分钟并计算A和B的频率:

1   0:06    A   2
2   0:06    B   2
3   0:12    A   1
4   0:12    B   1
5   0:18    A   1
6   0:24    A   1
7   0:24    B   1
8   0:18    A   1
9   0:30    A   1

此外,时间序列的类是字符。我该怎么办?

提问于
用户回答回答于

这里的转换次的做法POSIXctcut6个分钟的间隔时间,然后count

首先,您需要指定数据的年,月,日,小时,分钟和秒。这有助于将其扩展到更大的数据集。

library(tidyverse)
library(lubridate)

# sample data
d <- data.frame(t = paste0("2019-06-02 ", 
                           c("0:03","0:06","0:09","0:12","0:15",
                             "0:18","0:21","0:24","0:27","0:30"), 
                           ":00"),
                g = c("B","A"))

d$t <- ymd_hms(d$t) # convert to POSIXct with `lubridate::ymd_hms()`

如果您检查class新日期列,您会看到它是“POSIXct”。

> class(d$t)
[1] "POSIXct" "POSIXt" 

既然数据在“POSIXct”中,您可以cut按分钟间隔进行操作!我们将这个新的分组因子添加为一个名为的新列tc

d$tc <- cut(d$t, breaks = "6 min")  
d
                     t g                  tc
1  2019-06-02 00:03:00 B 2019-06-02 00:03:00
2  2019-06-02 00:06:00 A 2019-06-02 00:03:00
3  2019-06-02 00:09:00 B 2019-06-02 00:09:00
4  2019-06-02 00:12:00 A 2019-06-02 00:09:00
5  2019-06-02 00:15:00 B 2019-06-02 00:15:00
6  2019-06-02 00:18:00 A 2019-06-02 00:15:00
7  2019-06-02 00:21:00 B 2019-06-02 00:21:00
8  2019-06-02 00:24:00 A 2019-06-02 00:21:00
9  2019-06-02 00:27:00 B 2019-06-02 00:27:00
10 2019-06-02 00:30:00 A 2019-06-02 00:27:00

现在你可以使用group_by这个新的interval(tc),并计算出现的频率。获取组中观察的频率是一种相当常见的操作,因此dplyr规定count

count(d, tc)
# A tibble: 5 x 2
tc                      n
<fct>               <int>
1 2019-06-02 00:03:00     2
2 2019-06-02 00:09:00     2
3 2019-06-02 00:15:00     2
4 2019-06-02 00:21:00     2
5 2019-06-02 00:27:00     2

如果你?dplyr::count()在控制台中运行,你会发现它count(d, tc)只是一个包装器group_by(d, tc) %>% summarise(n = n())

所属标签

可能回答问题的人

  • 天使的炫翼

    17 粉丝531 提问36 回答
  • 富有想象力的人

    3 粉丝0 提问29 回答
  • o o

    4 粉丝494 提问27 回答
  • 学生

    3 粉丝476 提问27 回答

扫码关注云+社区

领取腾讯云代金券