【发布时间】:2017-08-26 17:18:03
【问题描述】:
我正在尝试将来自 Google Finance API 的股票数据中的时间戳转换为更可用的日期时间格式。
我已经使用data.table::fread读取数据here:
fread(<url>)
datetime open high low close volume
1: a1497619800 154.230 154.2300 154.2300 154.2300 500
2: 1 153.720 154.3200 153.7000 154.2500 1085946
3: 2 153.510 153.8000 153.2000 153.7700 34882
4: 3 153.239 153.4800 153.1400 153.4800 24343
5: 4 153.250 153.3000 152.9676 153.2700 20212
如您所见,“日期时间”格式相当奇怪。格式在这个link中描述:
完整的时间戳由前导“a”表示。像这样:
a1092945600。 'a' 后面的数字是 Unix 时间戳。 [...]没有前导“a”的数字是“间隔”。因此,例如,下面数据集中的第二行的间隔为 1。您可以将此数字乘以我们的间隔大小 [...] 并将其添加到最后一个 Unix 时间戳。
在我的例子中,“间隔大小”是 300 秒(5 分钟)。这种格式在每个新的一天开始时都会重新开始,因此尝试格式化非常困难!
我可以通过使用grep并搜索“a”来提取一天开始的索引位置;
newDay <- grep(df$V1, pattern = "a")
然后我的想法是根据索引位置将数据帧拆分为块,然后在每天分别扩展 unix 时间,然后在存储之前将它们组合回 data.table。
data.table::split 看起来可以完成这项工作,但我不确定如何在休息日提供它以按索引位置拆分,或者是否有更合乎逻辑的方式来实现相同的结果而不必打破它直到每一天。
谢谢。
【问题讨论】:
标签: r datetime split data.table unix-timestamp