我想重新排序数据框中的列。它并不像我想象的那么简单,首先我的数据表是在闪亮的应用程序中实现的,其中列数不同,它由3个常量列(ID,Nr,Abm
)和休息是反应性的 - >这里开始问题....
在整个数据操作等之后,我的最终产品看起来像这样:
data <- structure(list(ID = structure(1L, .Label = "1", class = "factor"),
T800_600 = 547.21, T800_650 = 297.42, T800_700 = 109.38,
T800_750 = 39.99, Abkuehlrate_T800_600 = 0.37, Abkuehlrate_T800_650 = 0.5,
Abkuehlrate_T800_700 = 0.91, Abkuehlrate_T800_750 = 1.25,
Nr = 12, Abm = 20), .Names = c("ID", "T800_600", "T800_650",
"T800_700", "T800_750", "Abkuehlrate_T800_600", "Abkuehlrate_T800_650",
"Abkuehlrate_T800_700", "Abkuehlrate_T800_750", "Nr", "Abm"),
row.names = "1", class = "data.frame", na.action = structure(2L,
.Names = "NA", class = "omit"))
输出
ID T800_600 T800_650 T800_700 T800_750 Abkuehlrate_T800_600 Abkuehlrate_T800_650
1 1 547.21 297.42 109.38 39.99 0.37 0.5
Abkuehlrate_T800_700 Abkuehlrate_T800_750 Nr Abm
1 0.91 1.25 12 20
我们可以看到列的顺序非常混乱。我想得到的是在开始的常量列:ID,Nr,Abm
然后排序&#34;列的降序&#34;:ID
,Nr
,{{1} },Abm
,T800_750
,T800_700
,T800_650
,T800_600
,Abkuehlrate_T800_750
,Abkuehlrate_T800_700
,Abkuehlrate_T800_650
< / p>
数据框 - &gt;列数不同!因此无法考虑手动输入。
感谢您的想法
答案 0 :(得分:1)
您可以尝试:
library(gtools)
data <- data[,mixedorder(colnames(data),decreasing = T)]
gr1 <- which(colnames(data) %in% c("ID","Nr","Abm"))
gr2 <- which(!colnames(data) %in% c("ID","Nr","Abm"))
data[c(gr1, gr2)]
Nr ID Abm T800_750 T800_700 T800_650 T800_600 Abkuehlrate_T800_750 Abkuehlrate_T800_700 Abkuehlrate_T800_650
1 12 1 20 39.99 109.38 297.42 547.21 1.25 0.91 0.5
Abkuehlrate_T800_600
1 0.37
gtools
包中包含mixedorder()
函数,这在此非常有用。