我有两个数据框,每个数据框有两列。第一列是时间戳,第二列包含一些值。 其中一个数据框比另一个大得多,但它们都包含相同时间戳范围内的数据。
如果我把这两者放在一起,我会得到一个很好的情节,显示它们在时间上的差异。
现在我希望得到这两个数据帧的时间绝对差异,以制作另一个图表,显示它们有多大差异(或创建一个包含此信息的箱线图),即使它们没有相同的长度和完全匹配时间戳。
检查此示例:
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可能没有与df1相同的时间戳,但它们的时间戳都在同一时间范围内。
当然,减法应该尝试匹配时间戳或从它们附近的时间戳平均值中减去值。
答案 0 :(得分: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
如果您对线性近似不满意,可以考虑拟合样条曲线。