跟随http://pages.stern.nyu.edu/~lpederse/papers/ValMomEverywhere.pdf (第933页的底部),我只想将我的每月数据限制为市值合计为90%的公司。 因此,对于每个月,我需要按其月初市场交易量对我的股票进行排名。我猜这不是问题,因为排序功能可以做到。 然后,我必须按降序排列它们,只包括股票,这些股票累计占股票市场市值的90%。 所以我需要计算每个月的总市值:
Marketcap<-rowSums(Volume.Monthly,na.rm=TRUE)
按升序排列:
help.variable<-sort(Volume.Monthly[i,],decreasing = FALSE)
按市值划分
q<-help.variable/Marketcap[i]
执行cum
cumsum(q)
并将所有低于0.9的值替换为NA
但是对于300个月以上的样本我该怎么做,仍然保持结构(Apple在第1列,AMZ在第2列,依此类推),这样在每一行(对于每个日期)中,公司(在专栏)不是90%市值排名靠前的公司的一部分,是NA吗?
非常感谢您的每次输入!
编辑
这是我的数据集 VM <-(matrix(c(3,1,5,2,6,5,7,8,9,19,17,2,4,9,11),nrow = 5,ncol = 3))>
[,1] [,2] [,3]
[1,] 3 5 17
[2,] 1 7 2
[3,] 5 8 4
[4,] 2 9 9
[5,] 6 19 11
这将是我每行(日期)的总交易量
Mcap<-rowSums(V.M)
V.M / Mcap给出:
[,1] [,2] [,3]
[1,] 0.1200000 0.2000000 0.6800000
[2,] 0.1000000 0.7000000 0.2000000
[3,] 0.2941176 0.4705882 0.2352941
[4,] 0.1000000 0.4500000 0.4500000
[5,] 0.1666667 0.5277778 0.3055556
ö<-V.M/Mcap
这将是每个股票在每个月(行)的市场份额百分比
现在,我只想包含最大的股票,它们总共拥有50%的市值(在我的示例中选择错误的数字)。
所以我需要
q<-foreach(i=1:5,.combine = rbind) %do%
+ sort(ö[i,])
哪个会产生:
[,1] [,2] [,3]
result.1 0.1200000 0.2000000 0.6800000
result.2 0.1000000 0.2000000 0.7000000
result.3 0.2352941 0.2941176 0.4705882
result.4 0.1000000 0.4500000 0.4500000
result.5 0.1666667 0.3055556 0.5277778
现在累计:
e<-foreach(i=1:5,.combine = rbind) %do%
+ cumsum(q[i,])
[,1] [,2] [,3]
result.1 0.1200000 0.3200000 1
result.2 0.1000000 0.3000000 1
result.3 0.2352941 0.5294118 1
result.4 0.1000000 0.5500000 1
result.5 0.1666667 0.4722222 1
这将是我的初始数据的标准,每只股票都不属于累积市值达到或超过50%的最大股票的一部分(是的,我的回答是90%,但我最终决定我的示例)应排除在外。
所以我输入数据的输出应该是
[,1] [,2] [,3]
[1,] NA NA 0.6800000
[2,] NA 0.7000000 NA
[3,] 0.2941176 0.4705882 NA
[4,] NA 0.4500000 0.4500000
[5,] NA 0.5277778 NA
很显然,由于排序,我的初始结构发生了变化。
每条有用的建议都将受到高度赞赏。