首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用R函数对矩阵的每一列进行排序?

如何用R函数对矩阵的每一列进行排序?
EN

Stack Overflow用户
提问于 2022-02-02 07:26:41
回答 2查看 118关注 0票数 2

您知道没有使用apply的情况下对矩阵的每一列排序的R函数,如下所示:

代码语言:javascript
复制
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函数,它不像这样使用apply来返回矩阵的每一列的最大向量吗?

代码语言:javascript
复制
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

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-02-02 09:18:45

如果您真的想避免使用*apply家族,可以尝试以下几种方法

  • order方法

代码语言:javascript
复制
> `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方法

代码语言:javascript
复制
> 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方法

代码语言:javascript
复制
> `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
票数 2
EN

Stack Overflow用户

发布于 2022-02-02 07:38:08

排序的一种可能性是使用来自colSortRfast

代码语言:javascript
复制
Rfast::colSort(mat)

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

我们还可以使用Rfast来获得每一列的最大值:

代码语言:javascript
复制
Rfast::colMaxs(mat2, value = TRUE)

[1]  2  7 12 23

排序的另一个选项是使用一个简单的for循环:

代码语言:javascript
复制
for(i in 1:ncol(mat)){
  mat[,i] <- sort(mat[,i])
}

还可以使用一个简单的for循环来获得max:

代码语言:javascript
复制
max <- 0
for(i in 1:ncol(mat2)){
  max[i] <- max(mat2[,i])
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70951810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档