【发布时间】:2019-05-23 18:32:40
【问题描述】:
我有一个以 1 分钟为增量的时间序列数据。我已经编写了一个代码,但是由于我拥有大量数据(超过 100 万行),循环遍历每一行所花费的时间太长了。数据如下所示:
t0 = as.POSIXlt("2018-12-23 00:01:00")
t0 = t0+seq(60,60*10,60)
p1 = seq(5,5*10,5)
p2 = seq(7,7*10,7)
m0 = cbind(p1,p2)
rownames(m0) = as.character(t0)
它看起来像这样:
> head(m0)
p1 p2
2018-12-23 00:02:00 5 7
2018-12-23 00:03:00 10 14
2018-12-23 00:04:00 15 21
2018-12-23 00:05:00 20 28
2018-12-23 00:06:00 25 35
2018-12-23 00:07:00 30 42
我想通过在每分钟之前添加 11 行(55 秒)将这些数据转换为 5 秒的增量,该值从最新值继承。所以它会是这样的:
> new0
p1 p2
2018-12-23 00:01:05 5 7
2018-12-23 00:01:10 5 7
2018-12-23 00:01:15 5 7
2018-12-23 00:01:20 5 7
2018-12-23 00:01:25 5 7
2018-12-23 00:01:30 5 7
2018-12-23 00:01:35 5 7
2018-12-23 00:01:40 5 7
2018-12-23 00:01:45 5 7
2018-12-23 00:01:50 5 7
2018-12-23 00:01:55 5 7
2018-12-23 00:02:00 5 7
2018-12-23 00:02:05 10 14
2018-12-23 00:02:10 10 14
2018-12-23 00:02:15 10 14
2018-12-23 00:02:20 10 14
2018-12-23 00:02:25 10 14
2018-12-23 00:02:30 10 14
2018-12-23 00:02:35 10 14
2018-12-23 00:02:40 10 14
2018-12-23 00:02:45 10 14
2018-12-23 00:02:50 10 14
2018-12-23 00:02:55 10 14
2018-12-23 00:03:00 10 14
我希望找到一些方法来做到这一点,而无需使用循环并利用我不太熟悉的xts 和/或data.table 中的有效代码。
我尝试使用基础 R 中的 ave 函数,但速度不够快。
【问题讨论】:
-
除了如何实现这一点的问题:效率如何?你说,循环遍历每一行需要太长时间,因为你已经有超过 1M 行。现在每行添加 11 行会产生 12M 行。因此,让代码在实际使用时“使用”这些数据来“伪造”额外的 11 行或完全改变该代码,难道不是更明智的做法吗?我的意思是 - 通过添加 11 行,您不会创建任何数据。你只是膨胀它。
标签: xts data.table r loops data.table xts