在R中排列多个列

时间:2015-03-12 19:04:41

标签: r rank

cI有以下数据框:

 teamID X3M   TR   AS  ST  BK  PTS       FGP       FTP
   1    423 2884 1405 585 344 5797 0.4763141 0.7370821
   2    467 2509  868 326 200 6159 0.4590164 0.7604167
   3    769 1944 1446 614 168 6801 0.4248021 0.7825521
   4    814 2457 1596 620 308 8058 0.4348856 0.8241445
   5    356 2215 1153 403 243 4801 0.4427576 0.7478921
   6    302 3360 1151 381 393 6271 0.4626974 0.6757176
   7    384 2318 1070 431 269 5225 0.4345146 0.7460317
   8    353 2529 1683 561 203 6150 0.4537273 0.7344740
   9    598 2384 1635 497 162 6439 0.4512104 0.7998392
  10    502 3191 1898 525 337 7107 0.4598565 0.7836970

我想生成这样的数据框:

 teamID rank_X3M rank_TR rank_AS rank_ST rank_BK rank_PTS rank_FGP rank_FTP
   1    5
   2    6
   3    9
   4    10
   5    3
   6    1
   7    4
   8    2
   9    8
  10    7

我尝试了申请(-df [,c(2:9)],1,rank,ties.method ='min')并得到了这个

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
X3M    4    4    5    4    4    6    4    4    5     6
TR     2    2    2    2    2    2    2    2    2     2
AS     3    3    3    3    3    3    3    3    3     3
ST     5    5    4    5    5    4    5    5    4     5
BK     6    6    6    6    6    5    6    6    6     4
PTS    1    1    1    1    1    1    1    1    1     1
FGP    8    8    8    8    8    8    8    8    8     8
FTP    7    7    7    7    7    7    7    7    7     7

有关下一步尝试的建议吗?谢谢!

1 个答案:

答案 0 :(得分:2)

尝试下面的sapply,您可以稍后更改变量的名称

cl <- read.table(text="
           teamID X3M   TR   AS  ST  BK  PTS       FGP       FTP
1    423 2884 1405 585 344 5797 0.4763141 0.7370821
2    467 2509  868 326 200 6159 0.4590164 0.7604167
3    769 1944 1446 614 168 6801 0.4248021 0.7825521
4    814 2457 1596 620 308 8058 0.4348856 0.8241445
5    356 2215 1153 403 243 4801 0.4427576 0.7478921
6    302 3360 1151 381 393 6271 0.4626974 0.6757176
7    384 2318 1070 431 269 5225 0.4345146 0.7460317
8    353 2529 1683 561 203 6150 0.4537273 0.7344740
9    598 2384 1635 497 162 6439 0.4512104 0.7998392
10    502 3191 1898 525 337 7107 0.4598565 0.7836970", header=T)

new <- cbind(cl$teamID, sapply(cl[,c(2:9)], rank))

new
             X3M TR AS ST BK PTS FGP FTP
     [1,]  1   5  8  5  8  9   3  10   3
     [2,]  2   6  6  1  1  3   5   7   6
     [3,]  3   9  1  6  9  2   8   1   7
     [4,]  4  10  5  7 10  7  10   3  10
     [5,]  5   3  2  4  3  5   1   4   5
     [6,]  6   1 10  3  2 10   6   9   1
     [7,]  7   4  3  2  4  6   2   2   4
     [8,]  8   2  7  9  7  4   4   6   2
     [9,]  9   8  4  8  5  1   7   5   9
    [10,] 10   7  9 10  6  8   9   8   8