【问题标题】:how to convert yearly time data in to specific hourly interval data in R如何将年度时间数据转换为R中的特定小时间隔数据
【发布时间】:2015-01-06 15:26:10
【问题描述】:

我有一个时间序列数据集,其中包含 10000 行和 1 年的数据,看起来像这样

 2012-01-01 06:23:02    c   d10
 2012-01-01 08:12:12    d   d2
 ...........................
 2012-12-31 08:22:24    s   d5

它有 3 个字段

  date_time, category1, category2 where category1 contains 4 categorical values (c,v,d,s) category2 contains 10 categorical values(d1....d10).

我想针对每个分类值 d1......d10 计算所有分类值 c、v、d、s 的单独计数。它应该就像 d1,d2..d10 相对于时间范围 0-1, 1-2, .... 22-23 存在多少 c,v,d,s

如何在从1-22-33-4、.....23-24开始的时间序列中表示上述数据

样本输出应该是这样的

               1-2               2-3   3-4   ........23-24

d1 c=2,d=3,v=3s=4

d2 c=3 d=3,v=2,s=2
.....

d10
我曾尝试使用 lubridate,data.table 包,但找不到预期的解决方案

【问题讨论】:

  • 不确定我是否理解您想要的输出
  • @mubarak 在预期的输出中,是category c=2, d=3row.names 吗?
  • hai @DavidArenburg 我再次编辑了问题,我想现在您可以确定我的问题了。
  • 你想要的输出是一团糟,我不明白,@akruns 回答有帮助吗?
  • @mubarak 正如 David Arenburg 所说,所需的输出仍然不清楚。

标签: r time-series data.table timespan


【解决方案1】:

不清楚预期的结果。可能会有所帮助:

indx <- with(dat1, as.numeric(format(as.POSIXct(cut(date_time,
                                          breaks='hour')),'%H')))
dat1$indx1 <- interaction(indx, indx+1, sep="-", 
                           lex.order=TRUE, drop=TRUE)
dat1$date_time <- as.character(dat1$date_time)
library(reshape2)
res1 <- dcast(dat1, category1+category2~indx1, value.var='date_time')
res1[,-(1:2)] <- lapply(res1[,-(1:2)], as.POSIXct)

 head(res1,2)
 #  category1 category2  0-1                 1-2  2-3  3-4  4-5  5-6  6-7  7-8
 #1        c1        d1 <NA> 2012-01-03 01:43:02 <NA> <NA> <NA> <NA> <NA> <NA>
 #2        c1       d10 <NA>                <NA> <NA> <NA> <NA> <NA> <NA> <NA>
 #   8-9                9-10 10-11               11-12 12-13 13-14 14-15 15-16
 #1 <NA> 2012-01-01 09:13:02  <NA>                <NA>  <NA>  <NA>  <NA>  <NA>
 #2 <NA> 2012-01-02 09:43:02  <NA> 2012-01-02 11:03:02  <NA>  <NA>  <NA>  <NA>
 #  16-17 17-18 18-19 19-20 20-21 21-22 22-23 23-24
 #1  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>
 #2  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>  <NA>

更新

如果你想要计数

res2 <- dcast(dat1, category1+category2~indx1, value.var='date_time', length)
res2[1:3,1:3]
#   category1 category2 0-1
#1        c1        d1   0
#2        c1       d10   0
#3        c1       d11   0

数据

set.seed(24)
dat1 <- data.frame(date_time=seq(as.POSIXct('2012-01-01 06:23:02', 
      '%Y-%m-%d %H:%M:%S'), length.out=300, by='10 min'), category1 =
 sample(paste0('c',1:20), 300, replace=TRUE), category2 = 
sample(paste0('d', 1:20), 300, replace=TRUE))

【讨论】:

  • 感谢@akrun 的建议。但这不是我预期的输出。我已经修改了问题以便更好地理解....请帮助我
猜你喜欢
  • 1970-01-01
  • 2021-01-24
  • 1970-01-01
  • 2016-11-16
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
相关资源
最近更新 更多