2013-10-25 28 views
1

我有由以下各列的數據幀(簡化的)差異(): 日期,ID,價格:使用與多維數據

Date   ID  Price 
1/2/2013 05947U4Q8 25 
1/2/2013 05947UT40 9.40264 
1/2/2013 07387BAW3 8.75 
1/2/2013 07387BBJ1 4.4861 
1/2/2013 07387BEQ2 5 
1/2/2013 12513EAY0 6 
1/2/2013 20047PAS6 33 
1/3/2013 05947UT40 9.40414 
1/3/2013 07387BAW3 8.75 
1/3/2013 07387BBJ1 4.4742 
1/3/2013 07387BEQ2 5 
1/3/2013 12513EAY0 6 
1/3/2013 20047PAS6 33 

所以,對於每一個日期,有幾個ID,每個都有一個價格。這些ID可能會從一天變到下一天(有些會下降,有些會被添加)。我試圖計算的是,每一天,每個ID的價格變化(如果ID的價格在前一天是已知的)。所以,上面的例子中,輸出應該是:

Date   ID Price change 
1/3/2013 05947UT40 0.0015 
1/3/2013 07387BAW3 0 
1/3/2013 07387BBJ1 -0.0119 
1/3/2013 07387BEQ2 0 
1/3/2013 12513EAY0 0 
1/3/2013 20047PAS6 0 

天真使用:

tapply(dataSet$Price, as.Date(dataSet$Date), diff) 

不工作,即不給我什麼我要找的。

+0

注意:您的數據並非真正的「多維」。每種類型的數據都是一個向量(一列)。 –

+0

您能保證每天最多隻有一個條目嗎?如果是這樣,問題變得更容易。 –

回答

1
dt <- data.table(dt) 
setkey(dt,ID,Date) 
dt[,pricediff:= Price - c(NA,head(Price,-1)), by = ID][!is.na(pricediff)] 

我假設日期存儲爲datetype,而不是一些古怪有序的因素或字符。如果是這樣,那麼這應該工作。嘗試將「11/10/2013」​​和「11/9/2013」​​的相同ID的記錄存儲爲字符,以查看將其存儲爲字符的問題。

+0

太棒了!謝謝 – user2069819