在r中重新排序列时偏移列

时间:2017-07-03 15:11:40

标签: r dataframe

我有以下示例数据集:

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栏和第11栏第1列和第1列之后是12 2,第13栏&amp;第3栏和第3栏之后是14 4等等......

  • 我在实际数据中有数百个这样的列,因此,很难给出列索引或名称

我已经在这个网站上查看了几个相关的主题但是找不到相关的主题。

1 个答案:

答案 0 :(得分: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]