在r中对矩阵中的行进行排序

时间:2015-09-24 19:26:10

标签: r matrix tapply

我在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 个答案:

答案 0 :(得分:1)

我不确定我理解你的问题。一个容易重现的例子肯定会有所帮助。

在主题中,您说要对行进行排序,但考虑到您提供的数据,您似乎想要对列进行排序?

test_fixer2 <- test_fixer[,c(4:9,1:3)]

以上代码将根据您的规范更改列。

答案 1 :(得分:1)

我会将矩阵分成两部分:M1只包含&#34; M&#34;列和M2只有&#34; H&#34;列。之后,可以使用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