我有一个数字类型的矩阵,暗淡的 10000 * 50。现在我想按值的顺序在每一行中找到前 5 个元素的索引。例如示例可能如下所示:
set.seed(2)
v1 <- matrix(runif(20 , 0 ,20 ) , 2 ,10)
v1
# [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
#[1,] 3.697645 11.466527 18.87679 2.58318 9.36037 11.053481 15.210266 8.105644 19.527970 8.896185
#[2,] 14.047481 3.361038 18.86950 16.66898 10.99967 4.777895 3.616402 17.070969 4.516509 1.499588
然后我希望输出看起来像:
#[1,] 9 3 7 2 6
#[2,] 3 8 4 1 5
我只能找到 this question ,它解释了如何查找前 n 个元素,但不是按值的顺序。
最佳答案
apply()
非常适合对矩阵进行逐行操作。你可以做
t(apply(v1, 1, function(x) order(-x)[1:5]))
# [,1] [,2] [,3] [,4] [,5]
# [1,] 9 3 7 2 6
# [2,] 3 8 4 1 5
这会沿矩阵 v1
逐行运行 order()
函数,然后为每个值取前五个值,转置结果,因为您指定的是行而不是列.
关于r - 按顺序找到向量中前 n 个元素的索引 [R],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38025660/