如何使用dplyr为多个变量名添加前缀?

时间:2015-11-16 17:37:32

标签: r dplyr

我试图为data.frame中的每个变量名添加一个公共前缀。例如,使用mtcars数据,我可以添加前缀" cars。"使用以下代码:

> data(mtcars)
> names(mtcars)
 [1] "mpg"  "cyl"  "disp" "hp"   "drat" "wt"   "qsec" "vs"  
 [9] "am"   "gear" "carb"
> names(mtcars) <- paste0("cars.", names(mtcars))
> names(mtcars)
 [1] "cars.mpg"  "cars.cyl"  "cars.disp" "cars.hp"  
 [5] "cars.drat" "cars.wt"   "cars.qsec" "cars.vs"  
 [9] "cars.am"   "cars.gear" "cars.carb"

但是,我想使用一些%>%语法将此作为管道操作的一部分(即使用dplyr串联的一系列函数)。似乎renameeverything()的某种组合应该可以解决问题,但我不知道如何使其发挥作用。有没有人有任何想法?

5 个答案:

答案 0 :(得分:18)

确实,你可以使用rename_(NSE rename本身不起作用):

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

......老实说,为什么?只是直接分配名称更短,更易读:

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

答案 1 :(得分:7)

对于将来的读者来说,dplyr现在可以使用select_ifselect_atselect_all函数来做到这一点:

dplyr::select_all(mtcars, .funs = funs(paste0("cars.", .)))

答案 2 :(得分:3)

另一种dplyr解决方案:

我发现使用dplyr rename_allrename_atrename_if

最简单

尝试此操作以重命名所有列名

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

尝试重命名“一些” 列名:

mtcars %>% rename_at(vars(hp:wt) ,function(x){paste0("cars.", x)})

答案 3 :(得分:2)

最新的解决方案(2020)似乎使用了dplyr 1.0.0及更高版本中的rename_with

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

使用.cols = 参数指定变量的子集,默认为everything()

答案 4 :(得分:1)

dplyr现在需要列表,并会发出警告:

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))

您可以按以下方式解决此示例:


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

reprex package(v0.3.0)于2019-07-31创建