gpt4 book ai didi

r - 如何在 R 中按每 n 分钟对时间进行分组

转载 作者:行者123 更新时间:2023-12-04 02:48:01 25 4
gpt4 key购买 nike

我有一个包含很多时间序列的数据框:

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

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

最佳答案

这是一种将时间转换为POSIXct的方法,将时间削减 6 分钟,然后计数

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

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("A","A","B","B","B"))

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

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

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

现在数据在“POSIXct”中,您可以按分钟间隔剪切它!我们将把这个新的分组因子添加为一个名为 tc 的新列。

d$tc <- cut(d$t, breaks = "6 min")  
d
t g tc
1 2019-06-02 00:03:00 A 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 B 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 A 2019-06-02 00:21:00
8 2019-06-02 00:24:00 B 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 B 2019-06-02 00:27:00

现在您可以group_by 这个新间隔 (tc) 和您的分组列 (g),并计算出现的频率。获取一组中的观察频率是一个相当常见的操作,因此 dplyr 为此提供了 count:

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

如果您在控制台中运行 ?dplyr::count(),您会看到 count(d, tc) 只是 的包装器group_by(d, g, tc) %>% 总结(n = n())

关于r - 如何在 R 中按每 n 分钟对时间进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56451761/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com