繁体   English   中英

计算每天在R中的市场份额

[英]Calculate marketshare per day in R

我目前正在处理以下3列的data.table(myDT):

TRADE_DATE TRADER VOLUME
01-MAY-2013  T1  100
01-MAY-2013  T2  200
01-MAY-2013  T3  500
01-MAY-2013  T4  200
02-MAY-2013  T1  400
02-MAY-2013  T2  500
02-MAY-2013  T3  50
02-MAY-2013  T4  50

我想找到一种方法来计算每个交易者每天的交易量。 目前,我正在计算每天的总交易量,然后与上一个表格合并以计算每个交易者每天的市场份额。 有没有更简单的方法可以做到这一点与data.tables?

我在我的代码下附加了她:

  daylyVolume<-myDT[,list(DAILY_VOLUME=sum(VOLUME)),by="TRADE_DATE"]
  myDT<-merge(myDT,daylyVolume,all=TRUE,by='TRADE_DATE')
  myDT$"SHARE_VOLUME"<-100*myDT$"VOLUME"/myDT$"DAILY_VOLUME"

结果如下:

TRADE_DATE TRADER VOLUME SHARE  DAYLY_VOLUME
01-MAY-2013  T1  100      10       1000
01-MAY-2013  T2  200      20       1000
01-MAY-2013  T3  500      50       1000
01-MAY-2013  T4  200      20       1000
02-MAY-2013  T1  400      40       1000
02-MAY-2013  T2  500      50       1000
02-MAY-2013  T3  50       5        1000
02-MAY-2013  T4  50       5        1000

一种简单的方法是:

dt[,list(VOLUME,DAILY_VOLUME=sum(VOLUME),SHARE=VOLUME/sum(VOLUME)*100),by="TRADE_DATE"]

    TRADE_DATE VOLUME DAILY_VOLUME SHARE
1: 01-MAY-2013    100         1000    10
2: 01-MAY-2013    200         1000    20
3: 01-MAY-2013    500         1000    50
4: 01-MAY-2013    200         1000    20
5: 02-MAY-2013    400         1000    40
6: 02-MAY-2013    500         1000    50
7: 02-MAY-2013     50         1000     5
8: 02-MAY-2013     50         1000     5

如果只想计算份额,一种更有效的方法是:

R> dt[,SHARE:=VOLUME/sum(VOLUME)*100,by="TRADE_DATE"]
R> dt

    TRADE_DATE TRADER VOLUME SHARE
1: 01-MAY-2013     T1    100    10
2: 01-MAY-2013     T2    200    20
3: 01-MAY-2013     T3    500    50
4: 01-MAY-2013     T4    200    20
5: 02-MAY-2013     T1    400    40
6: 02-MAY-2013     T2    500    50
7: 02-MAY-2013     T3     50     5
8: 02-MAY-2013     T4     50     5

你想要这个吗?

myDT[,list(share= VOLUME/sum(VOLUME)*100),by="TRADE_DATE"]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM