R Xts对齐时间(不是日期)

时间:2018-10-01 13:21:28

标签: r xts

我想按他们的时间比较2个时间序列。这两个系列的日期不同(例如,第一个系列的日期为2018-08-10,第二个系列的日期为2018-09-10),但具有相同的时间戳。是否可以在两个系列之间进行绑定/合并,而只吸收时间戳记而不是时间戳记日期?

谢谢

1 个答案:

答案 0 :(得分:0)

我不知道您的数据看起来如何,所以下次请创建可重复的检查表。我创建了两个data.frames可以作为示例。现在,您应该xts需要一个有效的时间序列对象,而hms时间序列对于xts来说不是有效的时间序列。

话虽如此,您始终可以使用以下命令将xts对象转换为data.frame:

my_df <- data.frame(times = index(my_xts), coredata(my_xts))

现在为示例:

我正在通过dplyr进行显示,但是如果您在每个data.frame中创建一个hms对象,merge也可以使用。我正在使用hms包中的as.hms在data.frames中创建一个hms对象,并将它们连接在一起。

x <- Sys.time() + 1:10*60 # today
y <- x - 60*60*24 # same time yesterday

df1 <- data.frame(times = x, val1 = 1:10)
df2 <- data.frame(times = y, val2 = 10:1)

library(dplyr)

# create hms object in df1 and in df2 on the fly
df1 %>% 
  mutate(times2 = hms::as.hms(times)) %>% 
  inner_join(df2 %>% mutate(times2 = hms::as.hms(times)), by = "times2"
             )

               times.x val1          times2             times.y val2
1  2018-10-01 18:26:05    1 18:26:05.421764 2018-09-30 18:26:05   10
2  2018-10-01 18:27:05    2 18:27:05.421764 2018-09-30 18:27:05    9
3  2018-10-01 18:28:05    3 18:28:05.421764 2018-09-30 18:28:05    8
4  2018-10-01 18:29:05    4 18:29:05.421764 2018-09-30 18:29:05    7
5  2018-10-01 18:30:05    5 18:30:05.421764 2018-09-30 18:30:05    6
6  2018-10-01 18:31:05    6 18:31:05.421764 2018-09-30 18:31:05    5
7  2018-10-01 18:32:05    7 18:32:05.421764 2018-09-30 18:32:05    4
8  2018-10-01 18:33:05    8 18:33:05.421764 2018-09-30 18:33:05    3
9  2018-10-01 18:34:05    9 18:34:05.421764 2018-09-30 18:34:05    2
10 2018-10-01 18:35:05   10 18:35:05.421764 2018-09-30 18:35:05    1