我希望按名称命名我的专栏。我知道我可以执行以下操作:portManDMA = portManDMA[,c(1,2,6,7,8,9,10,3,4,5,11,12,13,14,15,16,17,18,19)]
重新排序列,但我想要做的是实际使用排序中的列名。例如:
## OriginalMatrix
DEF ABC KLM HIJ
其中每3个字母代表一个列名。我想根据列名称对它们进行重新排序,例如portManDMA = portManDMA[,c("ABC","KLM","DEF","HIJ")]
,以便新的顺序为:
## NewMatrix
ABC KLM DEF HIJ
有人能帮我这个吗?
答案 0 :(得分:3)
一种可能性:
portManDMA[,sort(colnames(portManDMA))]
HTH
答案 1 :(得分:3)
您可以使用?colnames方便地访问数据框(或矩阵)中的列(变量)名称。完成后,您可以使用?order获得一个新问题,例如您在问题开头列出的新订单(此SO线程中有更多关于如何理解order()
的订单:{{3} })。以下是使用您的示例执行此操作的方法:
> portManDMA <- read.table(text="DEF ABC KLM HIJ
+ 1 2 1 3
+ 3 5 9 4", header=TRUE)
> portManDMA
DEF ABC KLM HIJ
1 1 2 1 3
2 3 5 9 4
> new.order <- order(colnames(portManDMA))
> new.order
[1] 2 1 4 3
> portManDMA <- portManDMA[, new.order]
> portManDMA
ABC DEF HIJ KLM
1 2 1 3 1
2 5 3 4 9
对于按字母顺序排列的假设很抱歉,您的代码对我来说很合适:
> portManDMA <- portManDMA[,c("ABC","KLM","DEF","HIJ")]
> portManDMA
ABC KLM DEF HIJ
1 2 1 1 3
2 5 9 3 4