【发布时间】:2018-10-01 13:21:28
【问题描述】:
我想按一天中的时间比较 2 个时间序列。这两个系列来自不同的日期(即,第一个系列的 2018-08-10 和第二个系列的 2018-09-10)但具有相同的时间戳。是否可以在两个系列之间进行 cbind/merge 只考虑时间戳而不考虑时间戳的日期?
谢谢
【问题讨论】:
我想按一天中的时间比较 2 个时间序列。这两个系列来自不同的日期(即,第一个系列的 2018-08-10 和第二个系列的 2018-09-10)但具有相同的时间戳。是否可以在两个系列之间进行 cbind/merge 只考虑时间戳而不考虑时间戳的日期?
谢谢
【问题讨论】:
我不知道您的数据是什么样的,所以下次请创建一个可重现的示例。我创建了 2 个可以作为示例的 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
【讨论】: