How do I add a prefix to several variable names using dplyr?

后端 未结 5 1695
花落未央
花落未央 2020-12-10 03:06

I\'m trying to add a common prefix to each of the variable names in a data.frame. For example, using the mtcars data, I could add the prefix \"cars.\" using th

相关标签:
5条回答
  • 2020-12-10 03:29

    Indeed, you can use rename_ (NSE rename itself doesn’t work):

    data %>% rename_(.dots = setNames(names(.), paste0('cars.', names(.))))
    

    … but honestly, why? Just assigning names directly is shorter and more readable:

    data %>% setNames(paste0('cars.', names(.)))
    
    0 讨论(0)
  • 2020-12-10 03:35

    Another dplyr solution:

    I find it easiest with the dplyr rename_all, rename_at, rename_if

    Try this for renaming all column names:

    mtcars %>% rename_all(function(x){paste0("cars.", x)})
    

    Try this for renaming "some" column names:

    mtcars %>% rename_at(vars(hp:wt) ,function(x){paste0("cars.", x)})
    
    0 讨论(0)
  • 2020-12-10 03:37

    For future readers, dplyr now can do this with the select_if, select_at, and select_all functions:

    dplyr::select_all(mtcars, .funs = funs(paste0("cars.", .)))
    
    0 讨论(0)
  • 2020-12-10 03:44

    dplyr now expects lists and will throw a warning:

    Warning message:
    funs() is soft deprecated as of dplyr 0.8.0
    Please use a list of either functions or lambdas: 
    
      # Simple named list: 
      list(mean = mean, median = median)
    
      # Auto named with `tibble::lst()`: 
      tibble::lst(mean, median)
    
      # Using lambdas
      list(~ mean(., trim = .2), ~ median(., na.rm = TRUE))
    
    

    you can solve this example as follows:

    
    dplyr::select_all(mtcars, list(~ paste0("cars.", .)))
    #>                     cars.mpg cars.cyl cars.disp cars.hp cars.drat cars.wt
    #> Mazda RX4               21.0        6     160.0     110      3.90   2.620
    #> Mazda RX4 Wag           21.0        6     160.0     110      3.90   2.875
    #> Datsun 710              22.8        4     108.0      93      3.85   2.320
    #> Hornet 4 Drive          21.4        6     258.0     110      3.08   3.215
    #> Hornet Sportabout       18.7        8     360.0     175      3.15   3.440
    #> Valiant                 18.1        6     225.0     105      2.76   3.460
    #> Duster 360              14.3        8     360.0     245      3.21   3.570
    #> Merc 240D               24.4        4     146.7      62      3.69   3.190
    #> Merc 230                22.8        4     140.8      95      3.92   3.150
    #> Merc 280                19.2        6     167.6     123      3.92   3.440
    #> Merc 280C               17.8        6     167.6     123      3.92   3.440
    #> Merc 450SE              16.4        8     275.8     180      3.07   4.070
    #> Merc 450SL              17.3        8     275.8     180      3.07   3.730
    #> Merc 450SLC             15.2        8     275.8     180      3.07   3.780
    #> Cadillac Fleetwood      10.4        8     472.0     205      2.93   5.250
    #> Lincoln Continental     10.4        8     460.0     215      3.00   5.424
    #> Chrysler Imperial       14.7        8     440.0     230      3.23   5.345
    #> Fiat 128                32.4        4      78.7      66      4.08   2.200
    #> Honda Civic             30.4        4      75.7      52      4.93   1.615
    #> Toyota Corolla          33.9        4      71.1      65      4.22   1.835
    #> Toyota Corona           21.5        4     120.1      97      3.70   2.465
    #> Dodge Challenger        15.5        8     318.0     150      2.76   3.520
    #> AMC Javelin             15.2        8     304.0     150      3.15   3.435
    #> Camaro Z28              13.3        8     350.0     245      3.73   3.840
    #> Pontiac Firebird        19.2        8     400.0     175      3.08   3.845
    #> Fiat X1-9               27.3        4      79.0      66      4.08   1.935
    #> Porsche 914-2           26.0        4     120.3      91      4.43   2.140
    #> Lotus Europa            30.4        4      95.1     113      3.77   1.513
    #> Ford Pantera L          15.8        8     351.0     264      4.22   3.170
    #> Ferrari Dino            19.7        6     145.0     175      3.62   2.770
    #> Maserati Bora           15.0        8     301.0     335      3.54   3.570
    #> Volvo 142E              21.4        4     121.0     109      4.11   2.780
    #>                     cars.qsec cars.vs cars.am cars.gear cars.carb
    #> Mazda RX4               16.46       0       1         4         4
    #> Mazda RX4 Wag           17.02       0       1         4         4
    #> Datsun 710              18.61       1       1         4         1
    #> Hornet 4 Drive          19.44       1       0         3         1
    #> Hornet Sportabout       17.02       0       0         3         2
    #> Valiant                 20.22       1       0         3         1
    #> Duster 360              15.84       0       0         3         4
    #> Merc 240D               20.00       1       0         4         2
    #> Merc 230                22.90       1       0         4         2
    #> Merc 280                18.30       1       0         4         4
    #> Merc 280C               18.90       1       0         4         4
    #> Merc 450SE              17.40       0       0         3         3
    #> Merc 450SL              17.60       0       0         3         3
    #> Merc 450SLC             18.00       0       0         3         3
    #> Cadillac Fleetwood      17.98       0       0         3         4
    #> Lincoln Continental     17.82       0       0         3         4
    #> Chrysler Imperial       17.42       0       0         3         4
    #> Fiat 128                19.47       1       1         4         1
    #> Honda Civic             18.52       1       1         4         2
    #> Toyota Corolla          19.90       1       1         4         1
    #> Toyota Corona           20.01       1       0         3         1
    #> Dodge Challenger        16.87       0       0         3         2
    #> AMC Javelin             17.30       0       0         3         2
    #> Camaro Z28              15.41       0       0         3         4
    #> Pontiac Firebird        17.05       0       0         3         2
    #> Fiat X1-9               18.90       1       1         4         1
    #> Porsche 914-2           16.70       0       1         5         2
    #> Lotus Europa            16.90       1       1         5         2
    #> Ford Pantera L          14.50       0       1         5         4
    #> Ferrari Dino            15.50       0       1         5         6
    #> Maserati Bora           14.60       0       1         5         8
    #> Volvo 142E              18.60       1       1         4         2
    

    Created on 2019-07-31 by the reprex package (v0.3.0)

    0 讨论(0)
  • 2020-12-10 03:47

    The latest solution (2020) seems to use rename_with, which is available in dplyr 1.0.0 and higher:

    mtcars %>% rename_with(.fn = ~ paste0("Myprefix_", .x, "_Mypostfix")) -> mtcars.custom
    

    Use the .cols = argument to specify a subset of variables, it defaults to everything().

    0 讨论(0)
提交回复
热议问题