我有一个公司市值的矩阵(MCap)。 我有第二个矩阵,其中包含这些公司的相应回报(Ret)。
首先,我使用以下命令获得每行90%的市场大小:
dec <- apply(MCap, 2, function(x){quantile(x, probs=.9, na.rm=T)})
我的目标是获得一个矩阵,其中包含那些公司的回报(来自Ret),这些矩阵超过其行的90% - 市场大盘(dec)。
步骤1: 如果市值超过行的90%-decil,我会创建一个零和一的矩阵
for (i in 1:n){
Ret.interim[,i] <- MCap[,i]>=dec[i]
}
步骤2: 然后我将这个新矩阵(Ret.interim)与Ret-Matrix相乘以得到我正在寻找的回报。
Ret.final <- Ret.interim*Ret
Ret.final[Ret.new==0] <- NA
有没有办法避免Step1中的for循环? 是否可以用apply-type函数替换? 或者Step1和Step2甚至可以合并为一步?
可以替换for循环,但是&#34;基准&#34; dec [i]随每一行而变化。
提前感谢您的帮助: - )
编辑: 一些随机数据来测试代码:
MCap <- sample(x=300:500, size=25, replace=T)
MCap <- matrix(MVe, nrow=5, ncol=5)
Ret <- runif(25, min=-1, max=1)
Ret <- matrix(Ret, nrow=5, ncol=5)