如何从一个向量收集观察,以另一个向量的值为条件

时间:2016-04-25 11:48:04

标签: r loops if-statement vector

我有以下问题:我正在考虑一个包含10个不同向量的数据库,其中包含相同数量的投资组合的回报。我想将样本分成两个子集,一个包含市场表现积极时的回报,另一个包含市场表现不佳时的回报。出于这个原因,我有另一个包含市场回报的向量。

到目前为止我做的是:

a)我已计算出市场有正或负回报的天数:

n_bull <- sum(Mkt_Ret >= 0 )
n_bear <- sum(Mkt_Ret <  0 )

b)我创建了一系列向量,其中包含每个投资组合的结果,即:

Portfolio_1_Bull <- rep(0, n_bull)
Portfolio_1_Bear <- rep(0, n_bear)

c)我运行一个循环,用循环填充后者:

for(i in 1:length(Portfolio_1_EW_tot_ret)){
  if(Mkt_Ret[i] >= 0){
   Portfolio_1_Bull[i] = Portfolio_1_EW_tot_ret[i]
  } 
 }
}

问题是得到的矢量Portfolio_1_Bull将具有与整个投资组合相同的观察次数。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

正如@Roland所说,最简单的方法是Portfolio_1_EW_tot_ret[Mkt_Ret >= 0]。但是,如果您希望循环工作,请使用另一个计数器来索引您的投资组合:

j=1
for(i in 1:length(Portfolio_1_EW_tot_ret)){
  if(Mkt_Ret[i] >= 0){
    Portfolio_1_Bull[j] = Portfolio_1_EW_tot_ret[i]
    j = j+1
  } 
}