合并两个不同时间粒度的时间序列
Posted
技术标签:
【中文标题】合并两个不同时间粒度的时间序列【英文标题】:merge two time series with different time granularities 【发布时间】:2013-09-11 05:55:29 【问题描述】:我有两个包含时间序列数据的 CSV 文件。我想将两者合并到一个文件中。 File1 具有 1 分钟间隔的周期性数据。 File2 具有非周期性的事件触发数据。 File2 中数据的时间戳可能与 File1 中的数据一致,也可能不一致。我想合并这两个数据集以创建一个数据集,其时间戳是 Data1 和 Data2 的并集。对于两者都不通用的时间戳,我希望将相应数据集的缺失条目指示为 NA。
这是 File1 的示例输入:
Time A1 A2
2013-08-05 00:00:00 2 1
2013-08-05 00:01:00 2 1
2013-08-05 00:02:00 1 1
这是 File2 的示例输入:
Time B1 B2 B3
2013-08-01 12:10:21 5 1 1
2013-08-05 00:02:00 5 1 1
2013-08-05 12:13:44 14 1 2
预期的输出如下:
Time A1 A2 B1 B2 B3
2013-08-01 12:10:21 NA NA 5 1 1
2013-08-05 00:00:00 2 1 NA NA NA
2013-08-05 00:01:00 2 1 NA NA NA
2013-08-05 00:02:00 1 1 5 1 1
2013-08-05 12:13:44 NA NA 14 1 2
我使用了 merge.zoo,也尝试了本论坛中其他相关帖子所建议的 merge.xts。但我没有得到预期的输出。这是我使用的代码。
A <- read.zoo(read.csv("File1.csv", header=TRUE));
B <- read.zoo(read.csv("File2.csv", header=TRUE));
C <- merge.zoo(A,B);
如果您能提供任何帮助,我将不胜感激。谢谢。
【问题讨论】:
【参考方案1】:在文件中读取的行应该被替换,如下所示:
> A <- read.zoo("File1.csv", header = TRUE, tz = "", sep = ",")
> B <- read.zoo("File2.csv", header = TRUE, tz = "", sep = ",")
> merge(A, B)
A1 A2 B1 B2 B3
2013-08-01 12:10:21 NA NA 5 1 1
2013-08-05 00:00:00 2 1 NA NA NA
2013-08-05 00:01:00 2 1 NA NA NA
2013-08-05 00:02:00 1 1 5 1 1
2013-08-05 12:13:44 NA NA 14 1 2
这是可复制的形式:
Lines1 <- " Time, A1, A2
2013-08-05 00:00:00, 2, 1
2013-08-05 00:01:00, 2, 1
2013-08-05 00:02:00, 1, 1
"
Lines2 <- " Time, B1, B2, B3
2013-08-01 12:10:21, 5, 1, 1
2013-08-05 00:02:00, 5, 1, 1
2013-08-05 12:13:44, 14, 1, 2
"
library(zoo)
A <- read.zoo(text = Lines1, header = TRUE, tz = "", sep = ",")
B <- read.zoo(text = Lines2, header = TRUE, tz = "", sep = ",")
merge(A, B)
【讨论】:
我试用了代码。但我收到错误消息:“as.POSIXlt.character(x, tz, ...) 中的错误:字符串不是标准的明确格式”。所以删除了 tz 字段,只使用了 A 看起来 tz 参数的位置很重要。当我将它放在标题和 sep 之间时,它起作用了。谢谢。 没有。 tz 的位置无关紧要。我添加了一个可复制的版本,可以复制并粘贴到 R 中来说明这一点。以上是关于合并两个不同时间粒度的时间序列的主要内容,如果未能解决你的问题,请参考以下文章