Eu tenho esse quadro de dados,
set.seed(123)
dataf <- data.frame( id = seq(1:5),
A_1 = rnorm(5),
A_2 = rnorm(5),
A_3 = rnorm(5),
A_4 = rnorm(5),
A_5 = rnorm(5))
> dataf
id A_1 A_2 A_3 A_4 A_5
1 1 -0.56047565 1.7150650 1.2240818 1.7869131 -1.0678237
2 2 -0.23017749 0.4609162 0.3598138 0.4978505 -0.2179749
3 3 1.55870831 -1.2650612 0.4007715 -1.9666172 -1.0260044
4 4 0.07050839 -0.6868529 0.1106827 0.7013559 -0.7288912
5 5 0.12928774 -0.4456620 -0.5558411 -0.4727914 -0.6250393
E eu tenho um vetor como o seguinte, com base no qual quero renomear as variáveis do quadro de dados acima.
sep <- c(0, 1, 1, 0, 0)
Neste vetor, tenho o marcador com base no qual as variáveis devem ser renomeadas. Se o marcador disser 0, nenhuma alteração. Se o marcador disser 1, adicionamos um prefixo ao nome da variável, digamos, _mod
. Por exemplo, o segundo elemento de sep
é 1, isso significa que preciso renomear a segunda variável A_2
para A_2_mod
. A tabela resultante deve ficar assim:
id A_1 A_2_mod A_3_mod A_4 A_5
1 1 -0.56047565 1.7150650 1.2240818 1.7869131 -1.0678237
2 2 -0.23017749 0.4609162 0.3598138 0.4978505 -0.2179749
3 3 1.55870831 -1.2650612 0.4007715 -1.9666172 -1.0260044
4 4 0.07050839 -0.6868529 0.1106827 0.7013559 -0.7288912
5 5 0.12928774 -0.4456620 -0.5558411 -0.4727914 -0.6250393
Posso fazer isso facilmente renomeando por posição. No entanto, estou pensando em como tornar a renomeação escalável no caso de, digamos, eu ter milhares de colunas.
Você pode usar
dplyr::rename_with
para ajudar. Por exemploUsei o
num_range()
auxiliar tidyselect para escolher apenas as colunas A que têm um 1 na posição correspondente emsep
Usando
base::colnames
:Usando
data.table::setnames
:Tentar