按列名称对数据框的列进行sorting

这可能是一个简单的问题,但我不知道如何按字母顺序排列。

test = data.frame(C = c(0, 2, 4, 7, 8), A = c(4, 2, 4, 7, 8), B = c(1, 3, 8, 3, 2)) # CAB # 1 0 4 1 # 2 2 2 3 # 3 4 4 8 # 4 7 7 3 # 5 8 8 2 

我喜欢按字母顺序排列列名来实现

 # ABC # 1 4 1 0 # 2 2 3 2 # 3 4 8 4 # 4 7 3 7 # 5 8 2 8 

对于其他人我想要我自己定义的顺序:

 # BAC # 1 4 1 0 # 2 2 3 2 # 3 4 8 4 # 4 7 3 7 # 5 8 2 8 

请注意,我的数据集很大,有10000个variables。 所以这个过程需要更加自动化。

您可以对names使用order ,并使用它在子集化时对列进行sorting:

 test[ , order(names(test))] ABC 1 4 1 0 2 2 3 2 3 4 8 4 4 7 3 7 5 8 2 8 

对于您自己定义的订单,您将需要定义您自己的名称到订单的映射。 这取决于你想如何做到这一点,但交换任何函数将这个order上面应该给你想要的输出。

例如,您可以根据指定所需顺序的目标向量对数据框的行进行sorting ,即可以将数据框names与包含所需列顺序的目标向量进行match

 test = data.frame(C=c(0,2,4, 7, 8), A=c(4,2,4, 7, 8), B=c(1, 3, 8,3,2)) 

可以使用简单的以下functionreplace(但只有在数据框没有多列时):

 test <- test[, c("A", "B", "C")] 

为他人:

 test <- test[, c("B", "A", "C")] 
  test[,sort(names(test))] 

sorting列的名称可以很容易地工作。

这是我发现用我的数据集来实现类似的问题。

首先,做一下詹姆斯上面提到的,即

 test[ , order(names(test))] 

其次,使用dplyr中的everything()函数在数据框的开始处移动特定的感兴趣的列(例如,“D”,“G”,“K”),将按字母sorting的列放在这些列之后。

 select(test, D, G, K, everything())