2017-07-03 152 views
-1

我有以下示例數據集:偏移列而重新排序r列

set.seed (1988) 
data <- matrix(sample(1:100, 80), 5, 16) 
colnames(data) <- paste0("V", 1:16) 

V1 V2 V3 V4 V5 V6 V7 V8 V9 V10 V11 V12 V13 V14 V15 V16 
56 40 75 78 33 82 97 23 99 16 26 69 60 50 93 10 
45 30 71 1 64 51 46 47 81 70  8 53 34  4 29  9 
37 65 73 54 39 79 55 95 96 44 43  3 41 49 22 17 
18 83 14 38 68 88 63 5 28 36 35 85 72 52 86  7 
15 13 92 62 58 57 25 84 89 48 74 20 59 12 76 19 

我想訂貨列和所需輸出是這樣的,

redata <- data[ , c(1:2, 11:12, 3:4, 13:14, 5:6, 15:16, 7:10)] 

V1 V2 V11 V12 V3 V4 V13 V14 V5 V6 V15 V16 V7 V8 V9 V10 
56 40 26 69 75 78 60 50 33 82 93 10 97 23 99 16 
45 30 8 53 71 1 34 4 64 51 29  9 46 47 81 70 
37 65 43 3 73 54 41 49 39 79 22 17 55 95 96 44 
18 83 35 85 14 38 72 52 68 88 86  7 63  5 28 36 
15 13 74 20 92 62 59 12 58 57 76 19 25 84 89 48 

其中第11列& 12列在第1列之後& 2列13 & 14列在第3列之後& 4等等...

  • 我有幾百列像這樣在實際的數據,因此,這將是非常難以割捨的列索引或名稱

我有看了這個網站上的幾個相關線索,但找不到任何相關的線索。

+2

我不明白有什麼問題 –

+0

請解釋一下更詳細 – Wen

+1

你需要思考的模式命令。一旦你能詳細解釋它,你可能會知道如何實現它 –

回答

0

不是超級優雅,但它適用於你的榜樣,並希望爲您的完整數據:

col_order <- c(1,2,11,12,3,4,13,14,5,6,15,16,7,8,17,18,9,10,19,20) 
i <- 1 
while(i < ncol(data)/20){ 
    col_order <- c(col_order,col_order+20) 
    i <- i+1 
} 
col_order <- intersect(col_order,1:ncol(data)) 
data_new <- data[,col_order]