我有100天10个股票收益(100行和10列)的矩阵。我正在对其应用以下操作。查找矩阵中特定元素的行索引并填充另一个矩阵
我已经使用了循环,它需要很长时间才能处理更大的数据集。我确信这可以通过使用数组操作来简化。
1)选择每行中的前3和底部3点的值和在“选择”矩阵(也有100×矢量),为“1”
Ret=array(rnorm(1000),dim=c(100,10))
select=array(rep(0,1000),dim=c(100,10))
Ret.top <- t(apply(Ret, 1, order, decreasing=T)[1:3,])
Ret.bottom <- t(apply(Ret, 1, order, decreasing=F)[1:3,])
for(i in 1:dim(Ret)[1])
{
select[i,Ret.top[i,]]=1
select[i,Ret.bottom[i,]]=1
}
2的值的索引存储)然后我得到一个信号向量,它是每天为所有股票计算的(信号矩阵,100乘10)。对于上述步骤中选定的股票,我检查信号并选择具有2个最高信号的股票,并存储具有2个最低信号的股票并将它们的指数存储在长短期矩阵中。 (+1为最高信号和-1的最低信号)
signal=array(rnorm(1000),dim=c(100,10))
longshort= array(rep(0,1000),dim=c(100,10))
for(i in 1:dim(Ret)[1])
{
x=order(signal[which(select[i,]==1)],decreasing=T)[1:2]
longshort[i,x]=1;
y=order(signal[which(select[i,]==1)],decreasing=F)[1:2]
longshort[i,y]=-1
}
在将这些环插入阵列操作任何帮助将不胜感激!
看来你只能在'signal [which(select [i,] == 1)]'中使用10个第一个信号。此外,x将始终为数字1-6,所以你从来没有任何信号用于指数6-10的longshort! – Tommy 2012-02-02 00:15:45