![](/img/trans.png)
[英]How to get the top n elements (in terms of frequency) from a vector in R?
[英]find the index of top n elements in a vector in order [R]
我有一個數字類型的矩陣,昏暗的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
我只能找到這個問題 ,它說明了如何找到前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()
函數,然后為每個v1
獲取前五個值,因為您指定的是行而不是列,所以會轉置結果。
這也可以用做data.table
后melting
成“長”格式,通過“VAR1”分組,我們得到的order
“價值”
library(reshape2)
library(data.table)
setDT(melt(v1))[, head(order(-value),5), Var1]
# Var1 V1
#1: 1 9
#2: 1 3
#3: 1 7
#4: 1 2
#5: 1 6
#6: 2 3
#7: 2 8
#8: 2 4
#9: 2 1
#10: 2 5
或使用base R
ave(-v1, row(v1), FUN = order)[,1:5]
# [,1] [,2] [,3] [,4] [,5]
#[1,] 9 3 7 2 6
#[2,] 3 8 4 1 5
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.