Te traemos la respuesta a este atascamiento, o por lo menos eso pensamos. Si sigues con interrogantes puedes escribirlo en el apartado de comentarios y sin dudarlo te responderemos
Solución:
Puedes usar el rename_at()
función para esto (comenzando en dplyr_0.7.0) o rename_with()
(a partir de dplyr_1.0.0).
Por ejemplo, puede pasar las variables que desea cambiar de nombre como cadenas. En tu ejemplo, el paste0
La función se puede usar para agregar el sufijo apropiado a cada columna.
cols = c("Sepal.Length", "Petal.Length")
to_app = ".xxx"
Para dplyr_1.0.0utilizar rename_with()
. El argumento de la función viene antes del argumento de la columna. Puede utilizar la función de selección ordenada all_of()
(u otros) para elegir columnas.
rename_with(df, .fn = ~paste0(., to_app), .cols = all_of(cols) )
# A tibble: 5 x 3
Sepal.Length.xxx Sepal.Width Petal.Length.xxx
*
1 5.1 3.5 1.4
2 4.9 3 1.4
3 4.7 3.2 1.3
4 4.6 3.1 1.5
5 5 3.6 1.4
Versiones anteriores de dplyr utilizar rename_at()
. Esto ha sido reemplazado en la versión 1.0.0, lo que significa que hay nuevas funciones para usar como se indicó anteriormente, pero esta función en particular no desaparecerá.
rename_at(df, cols, list( ~paste0(., to_app) ) )
# A tibble: 5 x 3
Sepal.Length.xxx Sepal.Width Petal.Length.xxx
*
1 5.1 3.5 1.4
2 4.9 3.0 1.4
3 4.7 3.2 1.3
4 4.6 3.1 1.5
5 5.0 3.6 1.4
También puede usar las funciones auxiliares de selección para elegir variables para cambiar el nombre, como contains
.
rename_at(df, vars( contains("Length") ), list( ~paste0(., ".xxx") ) )
# A tibble: 5 x 3
Sepal.Length.xxx Sepal.Width Petal.Length.xxx
*
1 5.1 3.5 1.4
2 4.9 3.0 1.4
3 4.7 3.2 1.3
4 4.6 3.1 1.5
5 5.0 3.6 1.4
Esta list()
la codificación reemplaza a la anterior funs()
codificación a partir de dplyr_0.7.0. Anteriormente, por ejemplo, funs( paste0(., to_app) )
EDITAR: en estos días, recomendaría usar dplyr::rename_with
, según la respuesta de @aosmith. Escriba una función que tome sus antiguos nombres de columna como entrada y devuelva sus nuevos nombres de columna como salida, y ya está 🙂
Llegué un poco tarde a la fiesta en esto, pero después de mirar la viñeta de programación durante mucho tiempo, encontré el ejemplo relevante en la variable de entrada y salida Diferente.
En mi caso de uso más simple, solo necesitaba cambiar el nombre de una columna al valor de un string:
> df1 = data_frame(index = 1:5, value = c(10, 20, 30, 40, 50))
> df1
# A tibble: 5 x 2
index value
1 1 10
2 2 20
3 3 30
4 4 40
5 5 50
> newname = 'blau'
> newname2 = 'wheee'
> df1 %>% rename(!!newname := value, !!newname2 := index)
# A tibble: 5 x 2
wheee blau
1 1 10
2 2 20
3 3 30
4 4 40
5 5 50
Entonces, si está feliz de hacerlo manualmente, puede simplemente:
df %>%
rename(!!paste("Sepal.Length", "xxx", sep = ".") := Sepal.Length)
Sin embargo, si necesita algo que se agregue automáticamente ".xxx"
para cualquier nombre de columna que se le proporcione, te recomiendo que eches un vistazo de cerca a esa sección. Todavía está un poco por encima de mi cabeza, desafortunadamente, pero puedo ver que es factible >_>
Si quieres usar dplyr’s rename
función, sería mejor crear un vector / lista con nombre y llamarlo usando el .dots
argumento en la versión de evaluación estándar:
cols <- c("Sepal.Length", "Petal.Length")
to_app <- ".xxx"
cols <- setNames(cols, paste0(cols, to_app))
df %>% rename_(.dots = cols)
## A tibble: 5 × 3
# Sepal.Length.xxx Sepal.Width Petal.Length.xxx
#*
#1 5.1 3.5 1.4
#2 4.9 3.0 1.4
#3 4.7 3.2 1.3
#4 4.6 3.1 1.5
#5 5.0 3.6 1.4
Sin embargo, tenga en cuenta que este enfoque está sujeto a cambios con la próxima versión 0.6.0 de dplyr (consulte, por ejemplo, http://blog.rstudio.org/2017/04/13/dplyr-0-6-0-coming-soon/ y http://dplyr.tidyverse.org/articles/programming.html).
Te mostramos comentarios y valoraciones
Acuérdate de que te damos el privilegio esclarecer si te ayudó.