【问题标题】:extract time information from data-time classes and construct a time series从数据时间类中提取时间信息并构建时间序列
【发布时间】:2016-06-18 03:24:08
【问题描述】:

有一个数据表如下所示:

                               timestamp       id
             785340 2016-04-01 00:01:19.000    4624
             785341 2016-04-01 00:01:19.000    4624
             785342 2016-04-01 00:02:20.000    4624
             794012 2016-04-01 00:02:21.000    4624
             18866  2016-04-01 00:02:28.142    4769
             794198 2016-04-01 00:03:31.000    4624
             18906  2016-04-01 00:03:40.130    4648
             18907  2016-04-01 00:04:40.155    4648
             18908  2016-04-01 00:05:40.157    4648
             797062 2016-04-01 00:05:48.000    4624

该表有两列:timestamp 和 id。时间戳列是使用df.table$timestamp<-as.POSIXct(df.table$timestamp) 生成的,第一列仅代表原始表中的行号,因为我根据时间戳对表进行了重新排序。

现在,我想计算给定分钟的 id 数,例如第 1 分钟有 2 个 id;第 2 分钟有 3 个 id,等等。换句话说,我想从时间戳中提取分钟信息。目标是构建一个时间序列,以一分钟为间隔,位于该 1 分钟间隔内的 id 的数量就是值。有没有有效的方法来做到这一点?谢谢。

【问题讨论】:

  • 这是秒而不是分钟。
  • 不确定分钟间隔是基于所有日期还是特定日期。如果日期是特定的,那么aggregate(id~timestamp, data = transform(df.table, format(timestamp, "%Y-%m-%d %H:%M")), FUN = length)
  • 我只展示了一部分数据。它可以包括两个月。因此,将有 60*24*30*2 分钟。谢谢。
  • 如果是完整日期而不是特定于数据,请将格式更改为format(timestamp, "%M")

标签: r statistics time-series


【解决方案1】:

我们可以在没有任何包的情况下做到这一点

aggregate(cbind(count=id)~ts_min, data = 
        transform(df.table, ts_min=format(timestamp, "%M")), FUN = length)
#   ts_min count
#1     01     2
#2     02     3
#3     03     2
#4     04     1
#5     05     2

【讨论】:

  • 感谢您的回答。它工作正常。如果我想获取每个特定 ID 的计数。例如,第 1 分钟有 2 个“4624”; 2-end 分钟有 2 个“4624”和 1 个“4769”。我尝试了类似聚合(cbind(count=(id=="4624"))~.. 但它不起作用。
  • @user288609 试试aggregate(cbind(count=id)~ts_min + id, data = ...
  • 感谢您的回答。我试过了,但这不是我想要的。也许我应该更清楚地解释我的问题。我在以下线程中发布了这个问题,stackoverflow.com/questions/37914133/…
【解决方案2】:

您可以使用lubridatedplyr

df.table %>%
    group_by(ts_min = minute(timestamp)) %>%
    summarise(count = n())

## Source: local data frame [5 x 2]
## 
##   ts_min count
##    (int) (int)
## 1      1     2
## 2      2     3
## 3      3     2
## 4      4     1
## 5      5     2

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多