2012-04-11 54 views
4

私はそれぞれ2つの列を持つ2つのデータフレームを持っています。最初の列はタイムスタンプで、2番目の列はいくつかの値を含んでいます。 データフレームの1つは他のデータフレームよりもはるかに大きいですが、どちらも同じタイムスタンプ範囲のデータを含んでいます。異なる行数のデータフレームを減算しますか?

私はこれらの2つをお互いの上にプロットすると、時間がどのように異なっているかを示す素敵なプロットが得られます。

ここでは、これらの2つのデータフレームの時間的な差異を、同じ長さと正確な値を持たないにもかかわらず、どのくらいの違いがあるかを示す別のプロットを作成する(またはこの情報を使ってボックスプロットを作成する)一致するタイムスタンプ。

チェックこの例:

DF1:

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

DF2:あなたがDF2かもしれないを参照してくださいとして

df3 <- abs(df1-df2) 

:私はこのような何かを達成する方法

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

同じタイムを持たないアンプはdf1と同じですが、両方とも同じ時間範囲でタイムスタンプを持っています。

もちろん、減算はタイムスタンプを一致させるか、近くにあるタイムスタンプ平均から値を減算するようにしてください。

答えて

3

私は2つの線形補間を使用することをお勧めし、タイムスタンプのあなたの二組の組合にそれらの両方を評価します:あなたは線形近似ではかなり満足していない場合

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ループを作らずにそれを達成する方法の手がかりを持っていなかった。 –

関連する問題