我需要为log x轴计算两个温度点之间的每个样本(样本可以使用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")
代码:
Zt <- vapply(unique(data$id), function(ID){
with(data[data$id == ID,], approx(x = Temp, y = Zeit, xout = 600))$y
}, double(1))
data.frame(id = unique(data$id), time = Zt)
approx
for方法中有一个选项。但是,仅指定了两种方法:
linear
constant
正如我之前提到的,日志就是我想要的
感谢帮助!
[更新]
为什么日志对我来说很重要。
为了说明起见,我将使用少量数据,在这些数据中我们可以看到日志是如何产生差异的:
这是数据:
data <-structure(list(id = c(1L, 1L, 1L), Zeit = c(31L, 701L, 902L),
Temp = c(930L, 549L, 481L)), .Names = c("id", "Zeit", "Temp"
), row.names = c(NA, 3L), class = "data.frame")
这是它的图(第一个是对数轴,第二个是法线):
例如,如果我想查看我需要达到700°C的时间,则以对数刻度为单位,它大约等于200秒,对于正常情况,大约等于325秒。
最简单的方法是使用approx()
。但是您需要做一些事情才能获得想要的行为:
approx
,然后exp
)答案,以转换回正确的单位。因此,在您的示例中,要解决Temp = 700时的Zeit,通过内插Zeit的对数转换值,这将是
exp( approx(x = data$Temp, y = log(data$Zeit), xout = 700))$y )
## 203.6818
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句