2017-10-10 101 views
0

我有兩個時間序列數據,具有不同的時間戳和不同數量的數據點。兩個時間序列數據具有不同的時間戳和不同數量的數據點

第一數據幀是:

 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

回答

2

嘗試滾動聯接,使用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

1

假定在端部的注給定的輸入。將數據幀轉換爲動物園並運行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

相關問題