R:基于排名重新排列向量

时间:2015-09-15 17:48:58

标签: r

> dput(dat)
structure(list(MEMORY1 = c(1, 1, 1, 1), MEMORY2 = c(2, 2, 2, 
2), MEMORY3 = c(3, 3, 3, 3), MEMORY4 = c(4, 4, 4, 4), MEMORY5 = c(5, 
5, 5, 8), MEMORY6 = c(6, 6, 8, 5), MEMORY7 = c(7, 8, 6, 6), MEMORY8 = c(8, 
7, 7, 7)), .Names = c("MEMORY1", "MEMORY2", "MEMORY3", "MEMORY4", 
"MEMORY5", "MEMORY6", "MEMORY7", "MEMORY8"), row.names = c(NA, 
4L), class = "data.frame")
> dat
  MEMORY1 MEMORY2 MEMORY3 MEMORY4 MEMORY5 MEMORY6 MEMORY7 MEMORY8
1       1       2       3       4       5       6       7       8
2       1       2       3       4       5       6       8       7
3       1       2       3       4       5       8       6       7
4       1       2       3       4       8       5       6       7

假设我有以上data.frame,并且每个条目都是MEMORY项目的等级。因此,对于第二行,MEMORY1排名为1,MEMORY2排名为2,... MEMORY8排名为7,等等。

我想根据MEMORY项目的排名重新排序data.frame的每一行。

第1行只会保持不变1 2 3 4 5 6 7 8

第2行应为1 2 3 4 5 6 8 7,因为MEMORY8排在MEMORY7之前

第3行应为1 2 3 4 5 7 8 6

第4行应为1 2 3 4 6 7 8 5

如何编写代码,以便在传入dat后,输出看起来像

     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
[1,]    1    2    3    4    5    6    7    8
[2,]    1    2    3    4    5    6    8    7
[3,]    1    2    3    4    5    7    8    6
[4,]    1    2    3    4    6    7    8    5

1 个答案:

答案 0 :(得分:3)

t(apply(dat, 1, order))
  [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
1    1    2    3    4    5    6    7    8
2    1    2    3    4    5    6    8    7
3    1    2    3    4    5    7    8    6
4    1    2    3    4    6    7    8    5