2013-10-25 22 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