正如在主题中所提到的,我正在努力将债券分组为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。
任何帮助都将不胜感激。