2016-03-14 55 views
0

我需要在兩個溫度點之間計算每個樣品的時差(樣品可以使用ID列進行區分)。R:從圖中找出兩點之間的差異

下面是示例數據:

> 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

我需要計算我需要達到溫度= 600°C(溫度)f的時間(Zeit)或每個樣本(ID)。所以在這個ID樣本1的例子中,要達到600°C(Temp列),我需要600秒。 我感謝任何幫助!

+0

你應該把這個問題更清楚。將圖片中的紅色文字放在正文中。 – Bazz

+0

預期產量是多少? – mtoto

+0

在這種情況下的預期輸出是例如帶有列** ID **(1&2)的表和具有相應**值** ** [600,602] –

回答

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) 
+0

的第二列有沒有什麼方法可以獲得每個** ID的值**樣本?所以在這個例子中,對於ID = 1和2的兩個樣本? –

+0

噢。使用:with(data [data $ id == ID,],...'其中'ID'是您想要分析的ID值 – Bazz

+0

我想獲取每個id的值,例如帶** ID的表**列和第二列**值** –