按列名称对数据框的列进行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())