2013-05-29 52 views
1

我試圖繪製隨着時間推移的車輛價格。我想包括註冊。沒有車輛作爲火花線的標記。我的數據是這樣的:使用R找到ggplot2的data.frame中的最後一個讀數

> head (x[c(1,2,3,4)]) 
    samp.date  idx price reg.date 
1 2012-11-15 xxxxxxb 27490 2010-3-1 
2 2012-11-15 yyyyxxm 28990 2010-9-1 
3 2012-11-15 zzzzzxxv 25980 2010-9-1 
4 2012-11-15 aaaaaz 31995 2011-1-1 
5 2012-11-15 aaaaaar 33995 2011-3-1 
6 2012-11-15 aaaaxxc 30980 2011-3-1 

對於任何給定的IDX,可能有很多樣品的日期(samp.date),價格可升亦可跌。因此,我認爲我想使用最後一個採樣日期和該採樣日期的價格(+/-一些模糊因子)來使用geom_text標記ggplot行。但是,我似乎無法拔出正確的座標。我認爲ddply(從plyr)是使用正確的工具,我認爲我取得一些進展:

ddply (x, .(idx), function (x) { return (c(tail(x$samp.date, 1), as.numeric (tail (x$price, 1))))}) 

但這種要挾的X $價格值日期:

  idx   V1   V2 
1 aaaaaau 2013-05-19 2082-03-24 
2 abbbbbb 2013-05-19 2082-03-24 
3 accccco 2013-03-17 2054-11-06 
4 adddddo 2013-05-19 2068-07-15 

這可能是我可以使用V2作爲y座標,但如果它是一個數字而不是日期,我會感到更高興。 ddply函數是否必須返回一個矩陣而不是data.frame?如果是這樣,我如何爲返回的不同維度獲得不同的類別?

我可以得到不同的類型/類返回這樣或者其他方式嗎?

回答

0

ddply中的函數可能會返回一個數據幀。實際上,這是推薦的做法:

ddply(x, .(idx), function (x) { 
     data.frame(date=tail(x$samp.date, 1), 
        price=as.numeric(tail(x$price, 1))) 
     }) 
+0

謝謝,Noam。我不確定它是否是我,但是我確實發現R作爲一種編程語言非常尷尬。如果ddply應該返回一個df,那麼它爲什麼不強制從函數返回到df? – user676952

+0

根據'ddply'的文檔,「當.fun返回一個數據框時會得到最明確的行爲 - 在這種情況下,碎片將與rbind.fill結合。如果.fun返回一個固定長度的原子向量,它將將它們綁定在一起並轉換爲數據框,其他任何值都會導致錯誤。「所以它確實將輸出強制爲一個數據幀,但是隻有在所有輸出結合之後。 –

相關問題