2012-04-11 64 views
4

我有兩個數據框,每個都有兩列。第一列是時間戳,第二列包含一些值。 其中一個數據幀比另一個數據幀大得多,但它們都包含相同時間戳範圍內的數據。減去具有不同行數的數據幀?

如果我將這兩個圖表放在一起,我會得到一個很好的圖表,顯示它們在時間上的差異。

現在我想通過這兩個數據框的時間來獲得絕對差異,使另一個圖表顯示它們有多少不同(或者創建一個帶有此信息的boxplot),即使它們沒有相同的長度和精確度匹配時間戳。

檢查這個例子:

DF1:

timestamp | data 
1334103075| 1.2 
1334103085| 1.5 
1334103095| 0.9 
1334103105| 0.7 
1334103115| 1.1 
1334103125| 0.8 

DF2:

timestamp | data 
1334103078| 1.2 
1334103099| 1.5 
1334103123| 0.8 
1334103125| 0.9 

我將如何實現這樣的事情:

df3 <- abs(df1-df2) 

如你所見DF2威力沒有相同的時間amps爲df1,但它們在同一時間範圍內都有時間戳。

當然,減法應該嘗試匹配時間戳或從它們靠近的時間戳平均值中減去值。

回答

3

我會建議使用兩個線性內插器和您的兩套時間戳的聯合評估他們兩個:

df1 <- data.frame(timestamp = c(1334103075, 1334103085, 1334103095, 
           1334103105, 1334103115, 1334103125), 
        data  = c(1.2, 1.5, 0.9, 0.7, 1.1, 0.8)) 

df2 <- data.frame(timestamp = c(1334103078, 1334103099, 1334103123, 
           1334103125), 
        data  = c(1.2, 1.5, 0.8, 0.9)) 

library(Hmisc) 
all.timestamps <- sort(unique(c(df1$timestamp, df2$timestamp))) 
data1 <- approxExtrap(df1$timestamp, df1$data, all.timestamps)$y 
data2 <- approxExtrap(df2$timestamp, df2$data, all.timestamps)$y 

df3 <- data.frame(timestamp = all.timestamps, 
        data1  = data1, 
        data2  = data2, 
        abs.diff = abs(data1 - data2)) 
df3 
# timestamp data1 data2 abs.diff 
# 1 1334103075 1.20 1.157143 0.04285714 
# 2 1334103078 1.29 1.200000 0.09000000 
# 3 1334103085 1.50 1.300000 0.20000000 
# 4 1334103095 0.90 1.442857 0.54285714 
# 5 1334103099 0.82 1.500000 0.68000000 
# 6 1334103105 0.70 1.325000 0.62500000 
# 7 1334103115 1.10 1.033333 0.06666667 
# 8 1334103123 0.86 0.800000 0.06000000 
# 9 1334103125 0.80 0.900000 0.10000000 

那麼你可以考慮擬合樣條曲線,如果你不與線性近似非常高興。

+0

謝謝!非常可以接受的解決方案:)在我的腦海裏有這樣的東西,但我沒有關於如何實現它而不做一個for循環的線索。 – 2012-04-11 01:29:55