将相同的列名应用于多个小标题

jbf*_*ink 4 r purrr

我想使用该names函数将相同的列名应用于多个数据帧,所有这些数据帧都具有相同的列数。我当然可以通过调用每个数据帧来以错误的方式执行此操作names,但我想正确执行此操作。这是设置:

library(tidyverse)

df1 <- tibble(1,2,3,4,5)
df2 <- tibble(6,7,8,9,10)
df3 <- tibble(11,12,13,14,15)
df4 <- tibble(16,17,18,19,20)

column_names <- c("Alpha","Bravo","Charlie","Delta","Echo")
tibbles_list <- (c("df1","df2","df3","df4"))
Run Code Online (Sandbox Code Playgroud)

错误的方式当然是:

names(df1) <- column_names
names(df2) <- column_names
names(df3) <- column_names
names(df4) <- column_names
Run Code Online (Sandbox Code Playgroud)

我想以某种方式使用tibbles_list(通过as.namerlang::syms类似)中的数据帧列表应用于column_names一行代码中的所有数据帧,也许使用某些种类的purrr'smapapply基 R中的函数之一,但我完全不知如何是好。

akr*_*run 5

tibbles_list仅仅是一个vector对象标识符为字符串。使用mget,我们获取 a 中对象的值list,循环遍历列表map并使用rename_all来更改名称

lst1 <- map(mget(tibbles_list), ~ .x %>%
                   rename_all(~ column_names))
list2env(lst1, .GlobalEnv)
Run Code Online (Sandbox Code Playgroud)

或使用 set_names

map(mget(tibbles_list), ~ .x %>% 
            set_names(column_names))
Run Code Online (Sandbox Code Playgroud)

注意:最好将其保存在 a 中,list而不是修改全局 env 中的对象