首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何按R中每n分钟对时间进行分组

如何按R中每n分钟对时间进行分组
EN

Stack Overflow用户
提问于 2019-06-05 05:46:18
回答 1查看 4.8K关注 0票数 3

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

代码语言:javascript
复制
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的频率:

代码语言:javascript
复制
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

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

EN

回答 1

Stack Overflow用户

发布于 2019-06-05 06:06:33

这里有一种将时间转换为POSIXct的方法,按6分钟间隔cut时间,然后count

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

代码语言:javascript
复制
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“。

代码语言:javascript
复制
> class(d$t)
[1] "POSIXct" "POSIXt" 

现在数据在"POSIXct“中,您可以按分钟间隔对其执行cut操作!我们将添加这个新的分组因子作为一个名为tc的新列。

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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) %>% summarise(n = n())的一个包装器。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56451761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档