Saltar al contenido

Cómo cambiar el nombre de las columnas seleccionadas usando dplyr con nuevos nombres de columna como cadenas

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ó.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)


Tags : / /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *