按名称排序列

时间:2013-12-05 15:00:04

标签: r

我希望按名称命名我的专栏。我知道我可以执行以下操作: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  

有人能帮我这个吗?

2 个答案:

答案 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