R:重命名数据框列表中的某些变量以匹配其他变量

时间:2020-09-30 23:40:50

标签: r dplyr tidyverse purrr

我有一个带有不一致但重叠的变量的数据帧列表。一些共享变量具有相似但不相同的名称。我想有条件地重命名该变量,以使其在数据集中保持一致。一次做到这一点的方法是

library(tidyverse)
df_1 <- starwars
df_2 <- starwars %>% rename(haircolor = hair_color)
df_3 <- starwars

df_list <- list(df_1, df_2, df_3)

df_list[[2]] <- df_list[[2]] %>% rename(hair_color = haircolor)

但是我希望它具有灵活性,以便我可以输入任何大小的列表,并且它将任何标题为hair_color的变量重命名为haircolor。是否有一种方法可以通过对现有变量有条件地重命名来purrr::map?最基本的解释如下:

df_list %>% 
  purrr::map( ~ rename(., hair_color = haircolor))

1 个答案:

答案 0 :(得分:1)

我们可以在select_helpers函数中传递它

library(dplyr)
library(purrr)
df_list %>% 
  purrr::map( ~  .x %>%
                   rename_at(vars(matches('hair_color')), ~ 'haircolor'))

或使用if/else条件

df_list %>% 
  purrr::map( ~ if('hair_color' %in% names(.)) {
            rename(., haircolor = hair_color)
            } else .)