合并具有不同长度(间隔)的时间序列数据

时间:2019-08-05 15:07:49

标签: r

我有两个水流测量装置,每分钟都会给出一个值。现在,我需要合并两个时间序列。我的问题:设备每隔几个小时就会产生一些故障。因此,两个时间序列具有不同的长度。我需要先填补空白。可以使用NA,零值或间隔前的前导值来完成此操作。

我可以通过时间序列的最小值和最大值轻松定义所需的时间向量tseq:

from <- as.POSIXct(min(Measurement1[[1]], Measurement1[[1]]))
to <- as.POSIXct(max(Measurement1[[1]], Measurement1[[1]]))
tseq <- as.data.frame(seq.POSIXt(from = from, to = to, by = deltaT, tz=UTC))

然后我尝试使用Zoo函数完成两个列表Measurement1和Measurement2:

Measurement1Zoo <- as.data.frame(zoo(x=Measurement1, tseq[[1]]))

这导致df的长度与tseq相同,但是zoo只是在向量的末尾添加了一些值。

我有点困惑动物园的工作方式。我只想在两个时间序列中添加缺少的时间戳,并用NA(或另一个值)完成它。怎么办呢?您可以在此处找到两个示例文件: Example time series

谢谢!

1 个答案:

答案 0 :(得分:0)

您可以使用dplyr进行外部连接(即full_join):

library(data.table)
m1 <- fread(file = "/Measurement1.CSV", sep = ";", header = TRUE)
m1$Date <- as.POSIXct(m1$Date,format="%d.%m.%Y %H:%M",tz=Sys.timezone())

m2 <- fread(file = "/Measurement2.CSV", sep = ";", header = TRUE)
m2$Date <- as.POSIXct(m2$Date,format="%d.%m.%Y %H:%M",tz=Sys.timezone())
names(m2)[2] <- "Value 5"

min(m1$Date) == min(m2$Date) #TRUE
max(m1$Date) == max(m2$Date) #TRUE

library(dplyr)
m_all <- full_join(x = m1, y = m2, by = "Date")
nrow(m1)    #11517
nrow(m2)    #11520
nrow(m_all) #11520
head(m_all)

#                 Date Value 1 Value 2 Value 3 Value 4 Value 5
#1 2015-07-24 00:00:00      28       2       0      26      92
#2 2015-07-24 00:01:00      28       2       0      26      95
#3 2015-07-24 00:02:00      28       2       0      26      90
#4 2015-07-24 00:03:00      28       2       0      26      89
#5 2015-07-24 00:04:00      28       2       0      26      94
#6 2015-07-24 00:05:00      27       1       0      26      95

#checking NA's
sum(is.na(m1$`Value 1`)) #0
sum(is.na(m1$`Value 2`)) #0
sum(is.na(m1$`Value 3`)) #3
sum(is.na(m1$`Value 4`))#0
sum(is.na(m2$`Value 5`)) #42

sum(is.na(m_all$`Value 1`)) #3
sum(is.na(m_all$`Value 2`)) #3
sum(is.na(m_all$`Value 3`)) #6 
sum(is.na(m_all$`Value 4`)) #3
sum(is.na(m_all$`Value 5`)) #42