【问题标题】:Rearrange a Few Columns in Data Frame without writing all index numbers in R重新排列数据框中的几列而不在 R 中写入所有索引号
【发布时间】:2022-09-23 16:54:55
【问题描述】:

我想知道是否有一种更简单的方法可以重新排列数据框中的列,而无需编写每列的索引号。当它的数据帧很小时,索引号很好,但是当它写大时,索引号会非常重复。

我有一个名为 pd 的数据框,它是

structure(list(X1 = c(6, 1), X2 = c(7, 2), X3 = c(8, 3), X4 = c(9, 
4), X5 = c(10, 5), X6 = c(11, 6), X7 = c(12, 7), X8 = c(13, 8
), X9 = c(14, 9), X10 = c(15, 10), X11 = c(16, 11), X12 = c(17, 
12), X13 = c(18, 13), X14 = c(19, 14), X15 = c(20, 15), X16 = c(21, 
16), X17 = c(22, 17), X18 = c(23, 18), X19 = c(24, 19), X20 = c(25, 
20), X21 = c(26, 21), X22 = c(27, 22), X23 = c(28, 23), X24 = c(29, 
24), X25 = c(30, 25), X26 = c(31, 26), X27 = c(32, 27), X28 = c(33, 
28), X29 = c(34, 29), X30 = c(35, 30), X31 = c(36, 31), X32 = c(37, 
32), X33 = c(38, 33), X34 = c(39, 34), X35 = c(40, 35), X36 = c(41, 
36), X37 = c(42, 37), X38 = c(43, 38), X39 = c(44, 39), X40 = c(45, 
40), X41 = c(46, 41), X42 = c(47, 42), X43 = c(48, 43), X44 = c(49, 
44), X45 = c(50, 45), X46 = c(51, 46), X47 = c(52, 47), X48 = c(53, 
48), X49 = c(54, 49), X50 = c(55, 50), X51 = c(56, 51), X52 = c(57, 
52)), class = c(\"tbl_df\", \"tbl\", \"data.frame\"), row.names = c(NA, 
-2L))

预期的输出是将列 X52 带入第一个列空间。如果有人有任何想法,请与我分享,因为我在互联网上搜索时找不到。

附件是输出的图像:

    标签: r dataframe


    【解决方案1】:

    使用 [ 对列重新排序:

    df[c(52, 1:51)]
    df[c("X52", colnames(df)[-52])]
    

    或更以编程方式:

    df[c(ncol(df), seq(ncol(df) - 1))]
    

    或者,使用dplyr::relocate:

    library(dplyr)
    relocate(df, 52)
    relocate(df, "X52")
    

    更以编程方式:

    relocate(df, ncol(df))
    

    【讨论】:

      【解决方案2】:

      使用dplyr::relocate()。你可以tidy-select你想通过列号选择的列。

      library(tidyverse)
      
      pd <- structure(list(X1 = c(6, 1), X2 = c(7, 2), X3 = c(8, 3), X4 = c(9, 
      4), X5 = c(10, 5), X6 = c(11, 6), X7 = c(12, 7), X8 = c(13, 8
      ), X9 = c(14, 9), X10 = c(15, 10), X11 = c(16, 11), X12 = c(17, 
      12), X13 = c(18, 13), X14 = c(19, 14), X15 = c(20, 15), X16 = c(21, 
      16), X17 = c(22, 17), X18 = c(23, 18), X19 = c(24, 19), X20 = c(25, 
      20), X21 = c(26, 21), X22 = c(27, 22), X23 = c(28, 23), X24 = c(29, 
      24), X25 = c(30, 25), X26 = c(31, 26), X27 = c(32, 27), X28 = c(33, 
      28), X29 = c(34, 29), X30 = c(35, 30), X31 = c(36, 31), X32 = c(37, 
      32), X33 = c(38, 33), X34 = c(39, 34), X35 = c(40, 35), X36 = c(41, 
      36), X37 = c(42, 37), X38 = c(43, 38), X39 = c(44, 39), X40 = c(45, 
      40), X41 = c(46, 41), X42 = c(47, 42), X43 = c(48, 43), X44 = c(49, 
      44), X45 = c(50, 45), X46 = c(51, 46), X47 = c(52, 47), X48 = c(53, 
      48), X49 = c(54, 49), X50 = c(55, 50), X51 = c(56, 51), X52 = c(57, 
      52)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
      -2L))
      
      pd2 <- relocate(.data = pd, X52, .before = 1)
      pd2
      # A tibble: 2 × 52
          X52    X1    X2    X3    X4    X5    X6    X7    X8    X9   X10   X11   X12
        <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
      1    57     6     7     8     9    10    11    12    13    14    15    16    17
      2    52     1     2     3     4     5     6     7     8     9    10    11    12
      # … with 39 more variables: X13 <dbl>, X14 <dbl>, X15 <dbl>, X16 <dbl>,
      #   X17 <dbl>, X18 <dbl>, X19 <dbl>, X20 <dbl>, X21 <dbl>, X22 <dbl>,
      #   X23 <dbl>, X24 <dbl>, X25 <dbl>, X26 <dbl>, X27 <dbl>, X28 <dbl>,
      #   X29 <dbl>, X30 <dbl>, X31 <dbl>, X32 <dbl>, X33 <dbl>, X34 <dbl>,
      #   X35 <dbl>, X36 <dbl>, X37 <dbl>, X38 <dbl>, X39 <dbl>, X40 <dbl>,
      #   X41 <dbl>, X42 <dbl>, X43 <dbl>, X44 <dbl>, X45 <dbl>, X46 <dbl>,
      #   X47 <dbl>, X48 <dbl>, X49 <dbl>, X50 <dbl>, X51 <dbl>
      # ℹ Use `colnames()` to see all variable names
      

      【讨论】:

        猜你喜欢
        • 2014-06-23
        • 1970-01-01
        • 2013-07-03
        • 2012-10-01
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        • 2015-09-25
        相关资源
        最近更新 更多