【问题标题】:R zoo aggregateR动物园聚合
【发布时间】:2014-08-28 18:51:35
【问题描述】:

我有一个包含以下数据的动物园对象:

                          Qty 
2013-11-25 12:41:21.33       2 
2013-11-25 12:41:22.25      2 
2013-11-25 12:41:22.75      75 
2013-11-25 12:41:24.22      3 
2013-11-25 12:41:25.22      1 
2013-11-25 12:41:26.22      1 

我想按秒聚合它,将每秒内的值相加,并且还将样本中不存在的秒数设为零,这样我就有了以下常规系列

                          Qty 
2013-11-25 12:41:21         2 
2013-11-25 12:41:22        77 
2013-11-25 12:41:23        0 
2013-11-25 12:41:24        3 
2013-11-25 12:41:25        1 
2013-11-25 12:41:26        1

注意第三行(尝试使用小插图中解释的聚合,使用转换原始时间戳以消除毫秒精度的函数在出现第三行和常规系列时失败)

我试过了,感谢下面的回答:

如果a是我原来的动物园系列

b=aggregate(a,by=cut(as.POSIXct(floor(as.numeric(index(a))),origin="1970-01-01"‌​), breaks='1 sec'),FUN=sum) 

但这给了 数量 2013-11-25 12:41:21 2 2013-11-25 12:41:22 77 2013-11-25 12:41:24 3 2013-11-25 12:41:25 1 2013-11-25 12:41:26 1

所以没有行

2013-11-25 12:41:23    0

这使得这个系列有规律,这是我的问题的重点 非常感谢您的帮助

【问题讨论】:

  • cut(as.POSIXct(index(...)), breaks='1 sec')聚合。
  • 谢谢.. 如果我的数据以非整数秒开头,那不会给出整数秒.. 你能写下整个命令吗?
  • 没有trunc的方法吗?我不回答动物园对象的屏幕输出提出的问题。我打算问一个关于自动输入的问题。也许有人会回答。生命太短暂了,无法获得正确的输入。如果你想让我玩,我需要 dput() 输出。
  • 谢谢.. 确实该解决方案不起作用。我稍微调整了一下以给出整数秒:如果 a 是我原来的动物园系列 b=aggregate(a,by=cut(as.POSIXct(floor(as.numeric(index(a))),,origin="1970- 01-01"), breaks='1 sec'),FUN=sum) 给出数量 2013-11-25 12:41:21 2 2013-11-25 12:41:22 77 2013-11-25 12:41 :24 3 2013-11-25 12:41:25 1 2013-11-25 12:41:26 1 所以没有行 2013-11-25 12:41:23 0 ,这使得系列规则,这是我的问题的重点

标签: r zoo


【解决方案1】:

读入测试数据,以秒为单位聚合,然后将聚合后的系列与网格合并填充:

# read test data

Lines <- "2013-11-25 12:41:21         2 
2013-11-25 12:41:22.25      2 
2013-11-25 12:41:22.75      75 
2013-11-25 12:41:24.22      3 
2013-11-25 12:41:25.22      1 
2013-11-25 12:41:26.22      1"

library(zoo)
z <- read.zoo(text = Lines, index = 1:2, tz = "")

# aggregate and merge with grid to fill it out 

ag <- aggregate(z, as.POSIXct(trunc(time(z), "sec")), sum)
g <- zoo(, seq(start(z), end(z), "sec"))
merge(ag, g, fill = 0)

【讨论】:

  • 又一个简洁优雅的解决方案,GG。我正在挠头,试图弄清楚为什么我对read.zoo 的体验如此不同。可能与不了解 tz 属性的默认值或选项有关。
  • 在最新版本的 Zoo on CRAN read.zoo 将检查输入日期或日期/时间是否为 yyyy-mm-dd 或 yyy-mm-dd HH:MM:SS 格式和在第一种和第二种情况下使用 Date 类或 POSIXct 类(带有本地时区)。如果输入是任何其他形式,或者您需要任何其他索引类,则需要通过适当的参数指定它,通常是 FUN= 参数。因此,在此示例中,现在可以省略 tz = "" 参数。只需编写 read.zoo(text = Lines, index = 1:2)
  • 我有一个数据集,它使用纳米时间,动物园时间为纳秒 ag
猜你喜欢
  • 2011-12-14
  • 2012-02-27
  • 2015-02-16
  • 1970-01-01
  • 2013-05-15
  • 2012-06-26
  • 1970-01-01
  • 2014-04-21
  • 2017-02-23
相关资源
最近更新 更多