2017-01-30 87 views
-2

我想对我的数据框中的列重新排序。它并不像我想象的那么简单,首先我的数据表是在有光泽的应用程序中实现的,其中列数不同,它由3个常量列(ID,Nr,Abm)组成,其余的是反应性的 - >这里启动问题....R:数据帧中列的非标准重新排序

整个数据操作等后,我的最终产品是这样的:

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再排序 “列的降序”:IDNrAbmT800_750T800_700T800_650T800_600Abkuehlrate_T800_750Abkuehlrate_T800_700Abkuehlrate_T800_650Abkuehlrate_T800_600

数据框 - >列数不同!因此不能考虑手动输入。

感谢想法

+0

其余列是如何排序的?你给的例子不是字母数字。 –

+0

刚刚添加了一个编辑,所有列按照他们应该的方式“排序”,关键是按照..800_750...,..800_700...,..800_650 ..的升序排列。 ','.800_600..' –

回答

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()功能,这是非常有益的在这里。

+0

谢谢! –