簡體   English   中英

在R中對矩陣元素進行排名和計數

[英]Ranking and Counting Matrix Elements in R

我知道也有類似的問題,但是找不到我的問題的答案。 我正在嘗試對矩陣中的元素進行排名,然后提取5個最高元素的數據。

這是我的嘗試。

set.seed(20)
d<-matrix(rnorm(100),nrow=10,ncol=10)
start<-d[1,1]
for (i in 1:10) {
for (j in 1:10) {
  if (start < d[i,j])
  {high<-d[i,j]
  rowind<-i
  colind<-j
  }
  }
}

盡管這給了我最高元素的數據,包括行號和列號,但我想不出一種方法來對2到5的元素進行相同的處理。

  rank(d, ties.method="max")

但這沒有幫助,因為它只是以矢量格式顯示排名。 我最終想要的是一個數據幀(或任何類型的表),其中包含秩,列名,行名以及矩陣中前5個元素的數據(數量)。

編輯

set.seed(20)
d<-matrix(rnorm(100),nrow=10,ncol=10)
d[1,2]<-5
d[2,1]<-5 
d[1,3]<-4
d[3,1]<-4

感謝您的回答。 那些完全適合我的目的,但是當我運行此代碼進行相關性圖表時-每對都有重復的數字-為了排名目的,我只想計算這兩個數字之一。 有什么辦法嗎? 謝謝。

這是一種非常粗略的方法:

DF = data.frame(row = c(row(d)), col = c(col(d)), v = c(d))
DF[order(DF$v, decreasing=TRUE), ][1:5, ]

   row col        v
91   1  10 2.208443
82   2   9 1.921899
3    3   1 1.785465
32   2   4 1.590146
33   3   4 1.556143

只需要進行部分排序會很好,但是在?order ,此選項似乎僅可用於sort ,而不能用於order


如果矩陣具有行名和列名,則可以方便地看到它們而不是數字。 這是我可能會做的:

dimnames(d) <- list(letters[1:10], letters[1:10])
DF = data.frame(as.table(d))

DF[order(DF$Freq, decreasing=TRUE), ][1:5, ]

   Var1 Var2     Freq
91    a    j 2.208443
82    b    i 1.921899
3     c    a 1.785465
32    b    d 1.590146
33    c    d 1.556143

不幸的是,列名在這里沒有多大意義,但是您可以像往常一樣使用names(DF) <-對其進行更改。

這是Matrix一種選擇

library(Matrix)
m1 <- summary(Matrix(d, sparse=TRUE))
head(m1[order(-m1[,3]),],5)
#   i  j        x
#93 3 10 2.359634
#31 1  4 2.234804
#23 3  3 1.980956
#55 5  6 1.801341
#16 6  2 1.678989

或使用melt

library(reshape2)
m2 <- melt(d)
head(m2[order(-m2[,3]), ], 5)

這是基數R中非常簡單的東西。

# set.seed(20)
# d <- matrix(rnorm(100), nrow = 10, ncol = 10)

d.rank <- matrix(rank(-d), nrow = 10, ncol = 10)

which(d.rank <= 5, arr.ind=TRUE)
     row col
[1,]   3   1
[2,]   2   4
[3,]   3   4
[4,]   2   9
[5,]   1  10

d[d.rank <= 5]
[1] 1.785465 1.590146 1.556143 1.921899 2.208443

可以(輕松)使結果更清楚(請參見Frank的評論):

cbind(which(d.rank <= 5, arr.ind=TRUE), v = d[d.rank <= 5], rank = rank(-d[d.rank <= 5]))

     row col        v rank
[1,]   3   1 1.785465    3
[2,]   2   4 1.590146    4
[3,]   3   4 1.556143    5
[4,]   2   9 1.921899    2
[5,]   1  10 2.208443    1

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM