2017-02-08 41 views
0

我一直在努力計算季度變化的股票沒有運氣。我有一個約1500萬行的data.table。 我需要計算的是根據Holder和他們自己的股票逐季度的絕對值變化。
我的數據表看起來像這樣:r季度的季度變化

stock  Holder       Quarter Shares 
1: GOOGLE Advance Capital Management, Inc. 2015 Q3 5800    
2: GOOGLE Advance Capital Management, Inc. 2015 Q4 9000    
3: GOOGLE Advance Capital Management, Inc. 2016 Q1 7000    
4: GOOGLE Advance Capital Management, Inc. 2016 Q2 7560    
5: GOOGLE Advest, Inc.      2015 Q3 12000 
6: GOOGLE Advest, Inc.      2015 Q3 13450 

我試圖使用data.table功能,採用

df[, qoq := c(NA, diff(Shares)), by = "Holder,stock,Quarter"] 

不過,我只得到NA。

我期待這樣的事情:

stock  Holder       Quarter Shares qoq 
1: GOOGLE Advance Capital Management, Inc. 2015 Q3 5800 NA   
2: GOOGLE Advance Capital Management, Inc. 2015 Q4 9000 4000   
3: GOOGLE Advance Capital Management, Inc. 2016 Q1 7000 -2000   
4: GOOGLE Advance Capital Management, Inc. 2016 Q2 7560 560   
5: GOOGLE Advest, Inc.      2015 Q3 12000 NA 
6: GOOGLE Advest, Inc.      2015 Q3 13450 1450 

在那之後,我需要計算這一結果的差異,再由持有人及股票。是否有通過分組幾列來計算統計數據的一般函數?我試過,但總正在yearsssss ...

aggregate(REPORTED_HOLDING~Quarter+FILER_NAME+STOCK_NAME, FUN=sum, data=df) 
+1

如果你讀了data.table護身符,你會看到這樣做聚合簡單快速的語法,比如'DT [,SUM(X),由=(Y,Z)] '其中x,y和z是列。 – Frank

+1

嗨,弗蘭克,謝謝!我讀了小插曲。現在我更瞭解數據表了! – ph33

回答

0

隨着dplyr,假設df是你的數據。 框架

df %>% 
    group_by(stock, Holder) %>% 
    mutate(qoq = Shares - lag(Shares)) %>% 
    summarise(qvar = var(qoq, na.rm = T)) 
+0

謝謝!這解決了我的問題。 – ph33