2016-12-13 6 views
-3

Я следующий R матрица:R: сортировка матрицы?

> matrix 
    8 4 3 5 7 2 1 6 ... 
8 0 0 1 0 0 0 0 0 
4 1 0 1 1 0 2 0 0 
3 5 0 0 1 0 0 0 0 
5 0 0 1 0 0 3 0 0 
7 0 0 0 0 0 0 0 0 
2 3 4 1 0 0 7 0 0 
1 8 0 4 0 0 0 8 0 
6 9 0 1 0 0 0 0 0 
... 
[ reached getOption("max.print") -- omitted 23 rows ] 

Вопрос: Можно ли сортировать матрицы строк и столбцов, так что

1 2 3 4 5 6 7 8 ... 
1 ... 
2 
3 
4 
5 
6 
7 
8 
... 

?

Я нашел только this here и задавался вопросом, нет ли лучшего варианта.

Спасибо!

ответ

2

Предполагая, что вы имеете в виду строк и столбцов имен матрицы, например, как в этом примере матрицы

m<-matrix(scan(text=" 
0 0 1 0 0 0 0 0 
1 0 1 1 0 2 0 0 
5 0 0 1 0 0 0 0 
0 0 1 0 0 3 0 0 
0 0 0 0 0 0 0 0 
3 4 1 0 0 7 0 0 
8 0 4 0 0 0 8 0 
9 0 1 0 0 0 0 0"), ncol=8) 
colnames(m)<-c(8,4,3,5,7,2,1,6) 
rownames(m)<-c(8,4,3,5,7,2,1,6) 

Вы можете отсортировать строки и столбцы по имени с

m[, sort(colnames(m))][sort(rownames(m)), ] 

строки и столбца имена всегда рассматриваются как строки. Так что если у вас есть большие номера, вы можете преобразовать в числовой до сортировки: sort(as.numeric(colnames(m)))

2

Вы можете также использовать функцию order() и подобрать строки и столбцы позиций:

mat[order(rownames(mat)),order(colnames(mat))] 

# 1 2 3 4 5 6 7 8 
#1 8 0 4 0 0 0 0 8 
#2 0 7 1 4 0 0 0 3 
#3 0 0 0 0 1 0 0 5 
#4 0 2 1 0 1 0 0 1 
#5 0 3 1 0 0 0 0 0 
#6 0 0 1 0 0 0 0 9 
#7 0 0 0 0 0 0 0 0 
#8 0 0 1 0 0 0 0 0 
Смежные вопросы