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