【问题标题】:R: Rename some variables in list of dataframes to match othersR:重命名数据框列表中的一些变量以匹配其他变量
【发布时间】:2020-09-30 23:40:50
【问题描述】:

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

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))

【问题讨论】:

  • 您的意思是在df_list 中您可以使用各种“hair_color”变体,例如“harcolor”、“harcolor”,并且您想将它们全部重命名为“haircolor”,并且对于其他变量也同样如此?

标签: r dplyr tidyverse purrr


【解决方案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 .)

【讨论】:

  • 这太棒了!对于 tidyverse 选项,有没有办法使用across 而不是rename 的范围版本?
  • @XÆA-12 重命名为rename_withrename_atacross 用于在我们没有得到列信息的每一列中应用函数
猜你喜欢
  • 2020-09-13
  • 2019-05-10
  • 2018-11-09
  • 2020-06-13
  • 1970-01-01
  • 2012-05-26
  • 2012-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多