R:数据帧中列的非标准重新排序

时间:2017-01-30 13:52:30

标签: r

我想重新排序数据框中的列。它并不像我想象的那么简单,首先我的数据表是在闪亮的应用程序中实现的,其中列数不同,它由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;:IDNr,{{1} },AbmT800_750T800_700T800_650T800_600Abkuehlrate_T800_750Abkuehlrate_T800_700Abkuehlrate_T800_650 < / p>

数据框 - &gt;列数不同!因此无法考虑手动输入。

感谢您的想法

1 个答案:

答案 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()函数,这在此非常有用。