#r #dplyr
Вопрос:
Допустим, я заинтересован в переименовании столбцов в нескольких наборах данных. Столбцы, которые необходимо переименовать, различаются по имени и положению, поэтому их нельзя выбрать таким образом. Однако столбцы, предшествующие столбцам, которые я хочу переименовать, и столбцы сразу после них являются постоянными.
В качестве примера, скажем mpg
, cyl
столбцы и в mtcars
всегда являются первыми двумя столбцами, и их имена никогда не меняются. vs:carb
Столбцы похожи, но их положение меняется в зависимости от количества столбцов, добавленных до них (но после cyl
). Однако имена переменных hp:qsec
изменяются, и когда-нибудь между ними будет добавлена новая переменная.
Допустим, я хочу добавить слово '_Value'
в конец каждого из столбцов, расположенных после cyl
и до vs
. Как бы я это сделал, в идеале используя dplyr
?
Ответ №1:
Вы можете попробовать —
library(dplyr)
mtcars %>%
rename_with(~paste0(., '_Value'), -c(mpg:cyl, vs:carb)) %>%
head
# mpg cyl disp_Value hp_Value drat_Value wt_Value qsec_Value vs am gear carb
#Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
#Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
#Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
#Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
#Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
#Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
Если у вас есть другие столбцы в данных и вы можете переименовать столбцы специально между cyl
ними, и vs
вы можете это сделать —
start <- match('cyl', names(mtcars))
end <- match('vs', names(mtcars))
cols <- (start 1):(end - 1)
names(mtcars)[cols] <- paste0(names(mtcars)[cols], '_Value')
Комментарии:
1. Это полезно, спасибо. Я ограничен более старой версией dplyr. Есть ли альтернатива
rename_with
, которую я могу использовать?2. Да, вы можете использовать
rename_at
в более старой версии —mtcars %>% rename_at(vars(-c(mpg:cyl, vs:carb)), ~paste0(., '_Value'))