R帮助:将债券分组为每行10个十分位数

时间:2016-03-14 20:40:14

标签: r finance portfolio

正如在主题中所提到的,我正在努力将债券分组为10 每行十分位数。

所以目前我的数据如下所示。列是ID 债券和他们每月排名*。 *现在我正在尝试将这些分组 排名为10十分位数(例如假设在05/2015有100个有效债券, 然后排名1~10将是第1组,排名第11~20组第2组等等......)

    date       a        b        c        d        e         f        g       h ...
    05/15      8        6        3        2        1         4        5       7 ...
    06/15      7        8        4        3        2         6        5       1 ...
    07/15      3        5        6        7        2         1        4       8 ...
    ...      

这就是我一直在努力做的事情。

     for (i in 1:116) 
     {for (j in 1:283) {if (j <=max.col(i)/10){print j = 1} 
     else if ( max.col(i)/10<j<=max.col(i)*2/10){print j = 2}
     else if ( max.col(i)*2/10<j<=max.col(i)*3/10){print j = 3}
     else if ( max.col(i)*3/10<j<=max.col(i)*4/10){print j = 4}
     else if ( max.col(i)*4/10<j<=max.col(i)*5/10){print j = 5}
     else if ( max.col(i)*5/10<j<=max.col(i)*6/10){print j = 6}
     else if ( max.col(i)*6/10<j<=max.col(i)*7/10){print j = 7}
     else if ( max.col(i)*7/10<j<=max.col(i)*8/10){print j = 8}
     else if ( max.col(i)*8/10<j<=max.col(i)*9/10){print j = 9}
     else if ( max.col(i)*9/10<j<=max.col(i)*10/10){print j = 10}
      }}

我是R的新手,这是我能想到的最好的。请帮忙。 我可以使用分位数函数来执行此操作....

谢谢, HK

[更新]

我尝试修改循环但仍然出错

     for (i in 1:dim(bondsr3)[1])
     {for (j in 1:dim(bondsr3)[2]) {
     if (is.na(bondsr3[i,j])) { }
     else if (as.numeric(bondsr3[i,j]) <= max.col(i)%/%10){bondsr4[i,j]<-2}
     else if ( max.col(i)%/%10<as.numeric(bondsr3[i,j]) & as.numeric(bondsr3[i,j])<=(max.col(i)%*%2)%/%10){bondsr4[i,j]<-2}
     else if ( (max.col(i)%*%2)%/%10<as.numeric(bondsr3[i,j]) & as.numeric(bondsr3[i,j])<=(max.col(i)%*%3)%/%10){bondsr4[i,j]<-3}
     else if ( (max.col(i)%*%3)%/%10<as.numeric(bondsr3[i,j]) & as.numeric(bondsr3[i,j])<=(max.col(i)%*%4)%/%10){bondsr4[i,j]<-4}
     else if ( (max.col(i)%*%4)%/%10<as.numeric(bondsr3[i,j]) & as.numeric(bondsr3[i,j])<=(max.col(i)%*%5)%/%10){bondsr4[i,j]<-5}
     else if ( (max.col(i)%*%5)%/%10<as.numeric(bondsr3[i,j]) & as.numeric(bondsr3[i,j])<=(max.col(i)%*%6)%/%10){bondsr4[i,j]<-6}
     else if ( (max.col(i)%*%6)%/%10<as.numeric(bondsr3[i,j]) & as.numeric(bondsr3[i,j])<=(max.col(i)%*%7)%/%10){bondsr4[i,j]<-7}
     else if ( (max.col(i)%*%7)%/%10<as.numeric(bondsr3[i,j]) & as.numeric(bondsr3[i,j])<=(max.col(i)%*%8)%/%10){bondsr4[i,j]<-8}
     else if ( (max.col(i)%*%8)%/%10<as.numeric(bondsr3[i,j]) & as.numeric(bondsr3[i,j])<=(max.col(i)%*%9)%/%10){bondsr4[i,j]<-9}
     else if ( (max.col(i)%*%9)%/%10<as.numeric(bondsr3[i,j]) & as.numeric(bondsr3[i,j])<=max.col(i)){bondsr4[i,j]<- 10}}}

但我仍然收到此错误消息...

      Warning message:
      In `[<-.factor`(`*tmp*`, iseq, value = 10) :
      invalid factor level, NA generated

我想要的输出是1到10的所有排名得1,从11到20得到2 ......从91到100,其中某个月的有效债券数量是100。

任何帮助都将不胜感激。

0 个答案:

没有答案