选择满足另一个矩阵的某些标准的矩阵元素而不使用for循环

时间:2014-09-24 12:52:30

标签: r for-loop apply

我有一个公司市值的矩阵(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)

0 个答案:

没有答案