首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以R为单位计算每日市场份额

以R为单位计算每日市场份额
EN

Stack Overflow用户
提问于 2013-10-18 09:28:32
回答 2查看 1.4K关注 0票数 2

我目前正在开发一个data.table (myDT),其中包含三个专栏:

代码语言:javascript
复制
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来实现呢?

我把她附在我的密码里:

代码语言:javascript
复制
  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"

结果如下:

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-18 09:43:43

一个简单的方法是这样做:

代码语言:javascript
复制
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

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

代码语言:javascript
复制
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
票数 2
EN

Stack Overflow用户

发布于 2013-10-18 09:43:52

您是想要这个吗?

代码语言:javascript
复制
myDT[,list(share= VOLUME/sum(VOLUME)*100),by="TRADE_DATE"]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19446155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档