2012-07-06 44 views
0

您好我有以下的列的一天內的數據表:[R data.table轉換價格收益率的標準

date, stock_id, timestamp, price 

首先,我添加鍵正確訂購:

setkeyv(my_table, c('stock_id','date','timestamp')) 

的數據看起來像:

 date  timestamp stock_id  price  
2011-01-04 1.294128e+12 7   3402.0  
2011-01-04 1.294129e+12 7   3402.5  
2011-01-04 1.294129e+12 7   3407.5  

現在我想將stock_price轉換爲返回和日誌返回。

你能指點一個高效/優雅的方式在R和data.table分組中做到這一點,而不訴諸循環嗎?

事先非常感謝,我很新的R.

回答

1

碰巧,你問的東西是最容易在R-Forge的最新版本(V1.8.1)進行回購使用一個新功能::=按組。

怎麼樣(未經測試):

my_table[, logret:=c(NA,diff(log(stock_price))), by=stock_name] 

若要從R-僞造V1.8.1,而不從源代碼編譯,你需要爲R 2.15.0或更高版本,然後運行只需鍵入:

install.packages("data.table", repos="http://R-Forge.R-project.org") 
+1

它現在工作後更改爲:dt [,logret:= c(NA,diff(log(stock_price))),by = list(stock_id,date)]謝謝大家的幫助。非常優雅和快速的解決方案。這就是爲什麼R很棒! – user1480926 2012-07-06 14:55:34

+0

@Matt Dowle的未經修改的代碼爲我工作。 – kalu 2016-07-18 17:48:28