【问题标题】: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);

如果您能提供任何帮助,我将不胜感激。谢谢。

【问题讨论】:

    标签: r merge time-series zoo


    【解决方案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 中来说明这一点。
    猜你喜欢
    • 2020-03-04
    • 2018-07-03
    • 2018-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 1970-01-01
    相关资源
    最近更新 更多