我有一个包含以下列名的数据框:
well, DIV10SD7, DIV11SD7, DIV7SD7, DIV9SD7
但是,我希望订单如下:
well, DIV7SD7, DIV9SD7, DIV10SD7, DIV11SD7
所以基本上,我想按“DIV”之后和“SD7”之前的数字排序。另外,我想在排序时省略“好”栏。
当我使用以下命令时:
df[,order(names(df))]
数据框的顺序保持不变,但井柱除外,它将移至末尾。我相信这是因为R一次读取每个字符串一个字符。因此,在这种情况下,所有以1开头的数字(例如DIV10和DIV11)都放在DIV7和DIV9之前。
有没有办法改变这种行为?
答案 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
)。这将允许您通过引用更新列顺序。