我需要在两个温度点之间计算每个样品的时间差(样品可以使用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)
这是一张有额外解释的图片:
我需要计算每个样本(ID)需要达到temp = 600°C(Temp)的时间(Zeit)。因此,对于ID样本1的这个示例,要达到600°C(临时列),我需要600秒。 我很感激任何帮助!
答案 0 :(得分:1)
使用approx
功能。对于目标温度Tt,所需时间由下式给出:
with(data, approx(x = Temp, y = Zeit, xout = Tt))$y
如果温度随时间上升,那么这可能会更复杂 - 您需要为ties
指定approx
参数(可能在您的上下文中放置ties = min
) - 但它会适用于你的例子。请注意,我用于x
和y
的值会相对于您的轴反转。
获得你想要的桌子:
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)