R按列值排序并获取列号

时间:2017-09-25 21:02:56

标签: r sorting

所以我有一个像这样的2D数组:

       A1BG         A1CF          A2M        A2ML1      A3GALT2
1  6.487285e-07 1.498563e-04 2.406783e-04 6.487285e-07 6.487285e-07
2  4.639610e-07 3.639610e-07 3.639610e-07 3.639610e-07 5.639610e-07
3  3.542874e-07 3.542874e-06 3.542874e-07 2.161153e-05 3.542874e-07
4  9.150830e-07 9.150830e-07 9.150830e-07 9.150830e-07 9.150830e-07
5  2.854448e-04 2.523827e-07 1.539534e-05 2.523827e-07 2.523827e-07

尝试获取每行中最大3个元素的索引(列名)。理想的输出就像:

1 A2M A1CF
2 A3GALT2 A1BG 
3 A2ML1 A1CF 

1 个答案:

答案 0 :(得分:0)

您可以使用apply并将margin设置为行,按最大值排序,然后选择前三个值。

set.seed(1)
df <- data.frame(a = rnorm(100, 100),
                 b = rnorm(100, 25),
                 d = rnorm(100, 90),
                 d = rnorm(100, 95))

output <- apply(df, 1, function(x) order(-x)[1:3])
output
> output
     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9]
[1,]    1    1    1    1    1    1    1    1    1
[2,]    4    4    4    4    4    4    4    4    4
[3,]    3    3    3    3    3    3    3    3    3

将以matrix格式返回输出。