两个时间序列数据具有不同的时间戳和不同数量的数据点
我有两个时间序列数据,具有不同的时间戳和不同数量的数据点。两个时间序列数据具有不同的时间戳和不同数量的数据点
第一数据帧是:
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
谁能请把我光?
尝试滚动联接,使用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
谢谢:)我得到它 – 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)
谢谢,这是很多知识:),它的工作原理。 – Mari
看起来像一个非马力加入我。搜索这个词,你应该得到一些命中。如果您需要更多帮助,请在您的问题中包含可重复使用的示例(使用'dput')。这对于涉及时间变量的问题尤其重要,因为它可以帮助我们更好地理解数据结构,并且更容易复制和粘贴数据,而不是从头开始构建数据。 – lmo