【问题标题】:Quarter over Quarter in rr 中的季度比季度
【发布时间】:2017-02-08 03:52:54
【问题描述】:

我一直在尝试计算股票的季度环比变化,但没有成功。我有一个大约 1500 万行的 data.table。 我需要计算的是根据持有人及其拥有的股票逐季度绝对值的变化。
我的数据表如下所示:

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

之后,我需要再次按 Holder 和 stock 计算这个结果的方差。是否有任何通用函数可以通过对几列进行分组来计算统计数据?我尝试了聚合,但需要几年的时间......

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

【问题讨论】:

  • 如果您阅读 data.table 小插曲,您会看到一种用于进行聚合的简单快速语法,例如 DT[, sum(x), by=.(y,z)] 其中 x、y 和 z 是列。
  • 嗨弗兰克,谢谢!我读了小插曲。现在我对数据表有了更多的了解!

标签: r data.table grouping aggregate-functions summary


【解决方案1】:

使用dplyr,假设df 是你的数据。frame

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2015-08-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多