R:从图中找出两点之间的差异

时间:2016-03-14 11:17:08

标签: r

我需要在两个温度点之间计算每个样品的时间差(样品可以使用ID柱区分)。

以下是示例数据:

> dput(data)
structure(list(id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 
2L, 2L), Zeit = c(0L, 180L, 360L, 420L, 600L, 604L, 0L, 180L, 
360L, 480L, 600L, 605L), Temp = c(963L, 824L, 666L, 658L, 641L, 
549L, 957L, 823L, 661L, 660L, 642L, 562L)), .Names = c("id", 
"Zeit", "Temp"), row.names = c(NA, 12L), class = "data.frame")

这是ggplot代码:

ggplot(data, aes(x=Zeit,y=Temp,group=id, colour=factor(id))) + geom_line(size=2)

这是一张有额外解释的图片:

enter image description here

我需要计算每个样本(ID)需要达到temp = 600°C(Temp)的时间(Zeit)。因此,对于ID样本1的这个示例,要达到600°C(临时列),我需要600秒。 我很感激任何帮助!

1 个答案:

答案 0 :(得分:1)

使用approx功能。对于目标温度Tt,所需时间由下式给出:

with(data, approx(x = Temp, y = Zeit, xout = Tt))$y

如果温度随时间上升,那么这可能会更复杂 - 您需要为ties指定approx参数(可能在您的上下文中放置ties = min) - 但它会适用于你的例子。请注意,我用于xy的值会相对于您的轴反转。

获得你想要的桌子:

Zt <- vapply(unique(data$id), function(ID){
    with(data[data$id == ID,], approx(x = Temp, y = Zeit, xout = Tt))$y
}, double(1))
data.frame(id = unique(data$id), time = Zt)