簡體   English   中英

如何用 R function 對矩陣的每一列進行排序?

[英]How to sort each column of matrix with R function?

你知道一個 R function 對矩陣的每一列進行排序而不使用這樣的應用:

mat= matrix(c(1,2,0,-7,-4,7,8,3,12,15,23,-21),nrow = 4,ncol = 3)
apply(mat,2,sort)
##
     [,1] [,2] [,3]
[1,]   -7   -4  -21
[2,]    0    3   12
[3,]    1    7   15
[4,]    2    8   23

您是否還知道一個 R function 返回一個矩陣的每一列的最大值向量而不使用這樣的應用?

mat2=matrix(c(2,1,0,-7,-4,7,8,3,12,15,23,-21),nrow = 3,ncol = 4)
apply(mat2,2,max)
##
[1]  2  7 12 23

謝謝。

如果您真的想避免使用*apply系列,您可以嘗試以下幾種替代方法

  • order方式
> `dim<-`(mat[order(col(mat), mat)], dim(mat))
     [,1] [,2] [,3]
[1,]   -7   -4  -21
[2,]    0    3   12
[3,]    1    7   15
[4,]    2    8   23

> `dim<-`(mat2[order(col(mat2), -mat2)], dim(mat2))[1, ]
[1]  2  7 12 23
  • ave方法
> ave(mat, col(mat), FUN = sort)
     [,1] [,2] [,3]
[1,]   -7   -4  -21
[2,]    0    3   12
[3,]    1    7   15
[4,]    2    8   23


> unique(ave(mat2, col(mat2), FUN = max))
     [,1] [,2] [,3] [,4]
[1,]    2    7   12   23

> ave(mat2, col(mat2), FUN = max)[1, ]
[1]  2  7 12 23
  • aggregate合法
> `dim<-`(unlist(aggregate(mat, list(rep(1, nrow(mat))), sort)[-1]), dim(mat))
     [,1] [,2] [,3]
[1,]   -7   -4  -21
[2,]    0    3   12
[3,]    1    7   15
[4,]    2    8   23

> unlist(aggregate(mat2, list(rep(1, nrow(mat2))), max)[-1])
V1 V2 V3 V4
 2  7 12 23

排序的一種可能性是使用來自colSortRfast

Rfast::colSort(mat)

     [,1] [,2] [,3]
[1,]   -7   -4  -21
[2,]    0    3   12
[3,]    1    7   15
[4,]    2    8   23

我們還可以使用Rfast來獲取每列的最大值:

Rfast::colMaxs(mat2, value = TRUE)

[1]  2  7 12 23

排序的另一種選擇是使用簡單的 for 循環:

for(i in 1:ncol(mat)){
  mat[,i] <- sort(mat[,i])
}

也可以使用一個簡單的 for 循環來獲得最大值:

max <- 0
for(i in 1:ncol(mat2)){
  max[i] <- max(mat2[,i])
}

暫無
暫無

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

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