Сортировка строк в матрице по r
У меня есть простая матрица в r, созданная с помощью tapply:
> test_fixer
H01 H02 H03 M01 M02 M03 M04 M05
M06
N 0.2205882 0.0750000 0.4027778 0.2926829 0.3207547 0.3142857 0.1627907 0.2653061 0.2285714
Y 0.3181818 0.2222222 0.2280702 0.3278689 0.3400000 0.3714286 0.2589286 0.3135593 0.2604167
Я хочу переупорядочить эту матрицу, чтобы столбцы в гистограмме появлялись в следующем порядке (то есть не в алфавитном порядке!):
M01,M02,M03,M04,M05,M06,H01,H02,H03
Я пробовал несколько вещей, в том числе что-то вроде этого:
test_fixer[order(names(test_fixer))]
но дает ошибку, что аргумент не вектор.
Любая помощь?
2 ответа
Я не уверен, что понимаю вашу проблему. Легко воспроизводимый пример наверняка поможет.
В теме вы говорите, что хотите сортировать строки, но, учитывая данные, которые вы предоставляете, кажется, что вы хотите отсортировать столбцы?
test_fixer2 <- test_fixer[,c(4:9,1:3)]
Приведенный выше код изменит столбцы в соответствии с вашей спецификацией.
Я бы разбил матрицу на две части: M1
содержащий толькоM
"колонны и M2
только "H
столбцы. После этого подматрицы могут быть рекомбинированы в желаемом порядке с cbind()
:
M1 <- test_fixer[,grepl("M",colnames(test_fixer))]
M2 <- test_fixer[,grepl("H",colnames(test_fixer))]
cbind(M1,M2)
# M01 M02 M03 M04 M05 M06 H01 H02 H03
#Y 0.2926829 0.3207547 0.3142857 0.1627907 0.2653061 0.2285714 0.2205882 0.0750000 0.4027778
#N 0.3278689 0.3400000 0.3714286 0.2589286 0.3135593 0.2604167 0.3181818 0.2222222 0.2280702