Renomear colunas em uma lista de dataframes

Olá pessoal,

Tenho uma lista de dataframes e gostaria de renomear algumas “colunas” que estão com nomes diferentes, porém não estou sabendo como proceder. Segue abaixo exemplo:


df1 <- iris %>% rename(Petal.Length.Red = Petal.Length)
df2 <- iris
df3 <- iris %>% rename(Petal.Length.Red = Petal.Length)
df4 <- iris
df5 <- iris %>% rename(Petal.Length.Red = Petal.Length)

dfs <- list(df1=df1, df2=df2, df3=df3, df4=df4, df5=df5)

novo_df <- dfs %>% 
  purrr::map(~.x %>%
               rename(Petal.Length = Petal.Length.Red) %>% 
               select(Species, Petal.Length)
             )```
1 Curtida

Olá, Saulo.

Acho que a solução abaixo faz o que você precisa.

library(tidyverse)

df1 <- rename(iris, Petal.Length.Red = Petal.Length)
df2 <- iris
df3 <- rename(iris, Petal.Length.Red = Petal.Length)
df4 <- iris
df5 <- rename(iris, Petal.Length.Red = Petal.Length)

dfs <- list(df1 = df1, df2 = df2, df3 = df3, df4 = df4, df5 = df5)

# Renomeia Petal.Length.Red -> Petal.Length e seleciona
renomear_selecionar <- function(df) {

  if ("Petal.Length.Red" %in% names(df)) {
    df <- rename(df, Petal.Length = Petal.Length.Red)
  }

  select(df, Species, Petal.Length)
}

purrr::map(dfs, renomear_selecionar)

Created on 2021-11-25 by the reprex package (v2.0.1)

Dicas:

  1. Evite fazer pipes de uma linha só, pois eles podem deixar o leitor confuso.

  2. Evite usar a notação de fórmula (~) dentro do map() quando a sua função for longa. A legibilidade do código diminui significativamente nesses casos.

Muito obrigado @clente !