两个时间序列数据具有不同的时间戳和不同数量的数据点

问题描述:

我有两个时间序列数据,具有不同的时间戳和不同数量的数据点。两个时间序列数据具有不同的时间戳和不同数量的数据点

第一数据帧是:

 Time   Power_kW 
10/9/2017 1:14:12 0.185 
10/9/2017 1:14:53 0.182 
10/9/2017 1:15:13 0.184 
10/9/2017 1:15:53 0.175 
. . 
. . 
10/9/2017 1:44:37 0.175 
. . 
. . 
10/9/2017 2:13:38 0.181 
. . 
. . 
10/9/2017 2:24:40 0.179 

第二数据帧是:

Local Time Value 
10/9/2017 1:13:01 0 
10/9/2017 1:42:10 1 
10/9/2017 2:11:58 0 
10/9/2017 2:23:30 1 

第二数据帧的数值表示中提到的日期2之间的值。这意味着'0'的值应该从10/9/2017 1:13:01 0到10/9/2017 1:42:10传播。以及从10/9/2017 1:42:10到2017/10/9 2:23:30之间的值1,等等。

我希望通过合并这两个数据帧列值来获得与第一个数据帧相同数量的数据点。我有许多与第二个数据帧类似的数据帧,这些数据帧都将帮助我在时间方面做出相关性。

我试图合并后得到以下结果:(我在结果代表整个数据看起来应该像加了一些分)

Time   Power_kW Value 
10/9/2017 1:14:12 0.185 0 
10/9/2017 1:14:53 0.182 0 
10/9/2017 1:15:13 0.184 0 
10/9/2017 1:15:53 0.175 0 
. .  
. .  
10/9/2017 1:44:37 0.175 1 
10/9/2017 1:45:47 0.176 1 
. .  
10/9/2017 2:13:38 0.181 0 
. .  
. .  
10/9/2017 2:24:40 0.179 1 

我没有指这些线程及其目的不会传播。

R: merge two irregular time series

merge two time series with different time granularities

谁能请把我光?

+0

看起来像一个非马力加入我。搜索这个词,你应该得到一些命中。如果您需要更多帮助,请在您的问题中包含可重复使用的示例(使用'dput')。这对于涉及时间变量的问题尤其重要,因为它可以帮助我们更好地理解数据结构,并且更容易复制和粘贴数据,而不是从头开始构建数据。 – lmo

尝试滚动联接,使用R的data.table包,这是很好的解释in this blog

library(data.table) 
df1 <- fread("Time,Power_kW 
10/9/2017 1:14:12,0.185 
10/9/2017 1:14:53,0.182 
10/9/2017 1:15:13,0.184 
10/9/2017 1:15:53,0.175 
10/9/2017 1:44:37,0.175 
10/9/2017 1:45:47,0.176 
10/9/2017 2:13:38,0.181 
10/9/2017 2:24:40,0.179") 
df2 <- fread("LocalTime,Value 
10/9/2017 1:13:01,0 
10/9/2017 1:42:10,1 
10/9/2017 2:11:58,0 
10/9/2017 2:23:30,1") 
df1$Time <- as.POSIXct(df1$Time, format="%m/%d/%Y %T") 
df2$LocalTime <- as.POSIXct(df2$LocalTime, format="%m/%d/%Y %T") 
setkey(df1, Time) 
setkey(df2, LocalTime) 
df2[df1, roll=Inf] 
# LocalTime Value Power_kW 
# 1: 2017-10-09 01:14:12  0 0.185 
# 2: 2017-10-09 01:14:53  0 0.182 
# 3: 2017-10-09 01:15:13  0 0.184 
# 4: 2017-10-09 01:15:53  0 0.175 
# 5: 2017-10-09 01:44:37  1 0.175 
# 6: 2017-10-09 01:45:47  1 0.176 
# 7: 2017-10-09 02:13:38  0 0.181 
# 8: 2017-10-09 02:24:40  1 0.179 
+0

谢谢:)我得到它 – Mari

假定在端部的注给定的输入。将数据帧转换为动物园并运行na.locf以填写NA值。最后选择对应于所述第一表中的元素和任选的转换回数据帧:

library(zoo) 

# convert to zoo 
Power_kW <- read.zoo(DF1, tz = "") 
Value <- read.zoo(DF2, tz = "") 

z <- na.locf(merge(Power_kW, Value))[time(Power_kW)] 
fortify.zoo(z) # optional 

,并提供:

   Index Power_kW Value 
1 2017-10-09 01:14:12 0.185  0 
2 2017-10-09 01:14:53 0.182  0 
3 2017-10-09 01:15:13 0.184  0 
4 2017-10-09 01:15:53 0.175  0 
5 2017-10-09 01:44:37 0.175  1 
6 2017-10-09 01:45:47 0.176  1 
7 2017-10-09 02:13:38 0.181  0 
8 2017-10-09 02:24:40 0.179  1 

注:我们假设以下的输入。请注意,我们假设POSIXct日期时间。

Lines1 <- " 
Time,Power_kW 
10/9/2017 1:14:12,0.185 
10/9/2017 1:14:53,0.182 
10/9/2017 1:15:13,0.184 
10/9/2017 1:15:53,0.175 
10/9/2017 1:44:37,0.175 
10/9/2017 1:45:47,0.176 
10/9/2017 2:13:38,0.181 
10/9/2017 2:24:40,0.179" 

Lines2 <- " 
LocalTime,Value 
10/9/2017 1:13:01,0 
10/9/2017 1:42:10,1 
10/9/2017 2:11:58,0 
10/9/2017 2:23:30,1" 

fmt <- "%m/%d/%Y %H:%M:%S" 
DF1 <- read.csv(text = Lines1) 
DF2 <- read.csv(text = Lines2) 

# convert date/time to POSIXct 
fmt <- "%m/%d/%Y %H:%M:%S" 
DF1$Time <- as.POSIXct(DF1$Time, format = fmt) 
DF2$LocalTime <- as.POSIXct(DF2$LocalTime, format = fmt) 
+0

谢谢,这是很多知识:),它的工作原理。 – Mari