我试图为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
串联的一系列函数)。似乎rename
和everything()
的某种组合应该可以解决问题,但我不知道如何使其发挥作用。有没有人有任何想法?
答案 0 :(得分:18)
确实,你可以使用rename_
(NSE rename
本身不起作用):
data %>% rename_(.dots = setNames(names(.), paste0('cars.', names(.))))
......老实说,为什么?只是直接分配名称更短,更易读:
data %>% setNames(paste0('cars.', names(.)))
答案 1 :(得分:7)
对于将来的读者来说,dplyr
现在可以使用select_if
,select_at
和select_all
函数来做到这一点:
dplyr::select_all(mtcars, .funs = funs(paste0("cars.", .)))
答案 2 :(得分:3)
另一种dplyr
解决方案:
我发现使用dplyr
rename_all
,rename_at
,rename_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创建