订购数据框中的列

时间:2015-07-03 15:38:06

标签: r sorting dataframe

我有一个包含以下列名的数据框:

well, DIV10SD7, DIV11SD7, DIV7SD7, DIV9SD7

但是,我希望订单如下:

well, DIV7SD7, DIV9SD7, DIV10SD7, DIV11SD7

所以基本上,我想按“DIV”之后和“SD7”之前的数字排序。另外,我想在排序时省略“好”栏。

当我使用以下命令时:

df[,order(names(df))]

数据框的顺序保持不变,但井柱除外,它将移至末尾。我相信这是因为R一次读取每个字符串一个字符。因此,在这种情况下,所有以1开头的数字(例如DIV10和DIV11)都放在DIV7和DIV9之前。

有没有办法改变这种行为?

1 个答案:

答案 0 :(得分:4)

您可以尝试“gtools”包中的mixedorder功能:

mydf[c(1, mixedorder(names(mydf)[-1]) + 1)]
##   well DIV7SD7 DIV9SD7 DIV10SD7 DIV11SD7
## 1    1       7       9        3        5
## 2    2       8      10        4        6

示例数据:

mydf <- structure(list(well = 1:2, DIV10SD7 = 3:4, DIV11SD7 = 5:6, DIV7SD7 = 7:8, 
        DIV9SD7 = 9:10), .Names = c("well", "DIV10SD7", "DIV11SD7", 
    "DIV7SD7", "DIV9SD7"), row.names = 1:2, class = "data.frame")

我还建议您将数据集转换为data.table,以便可以使用“data.table”中的set函数(如setcolorder)。这将允许您通过引用更新列顺序。