2017-01-30 136 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

謝謝! –