R 将相同的列名应用于多个TIBLE
我想使用R 将相同的列名应用于多个TIBLE,r,purrr,R,Purrr,我想使用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 &l
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"))
库(tidyverse)
df1tibbles\u列表
只是对象标识符作为字符串的向量。使用mget
,我们在列表中获取objects的值,使用map
循环列表,并使用rename\u all
更改名称
lst1 <- map(mget(tibbles_list), ~ .x %>%
rename_all(~ column_names))
list2env(lst1, .GlobalEnv)
注意:最好将其保存在列表中,并且不要修改全局环境中的对象。首先,如果您使用的是数据帧列表,而不是需要从环境中拉出的数据帧名称列表,那么您的情况会好得多。如果你在这件事上有选择,那太好了;如果没有,则可以将这些数据帧复制到单个列表中
这篇文章有7个答案,其中有各种各样的方法和原因,包括如果你没有从一个列表开始的奢侈的话
完成后,您可以使用基本的setNames
(或者rlang
wrapperset\u names
,在这里并不真正需要它的能力)设置名称,它本身就是名称的包装器。使用purrr
映射函数,或对基本版本使用lappy
库(dplyr)
dfs%
purrr::map(~setNames(,列名称))
#> [[1]]
#>#A tible:1 x 5
#>阿尔法布拉沃查理三角回波
#>
#> 1 1 2 3 4 5
#####削减剩余产量
lappy(dfs,函数(x)集合名(x,列名称))
#输出同上
由于setNames
是names
的包装器:
lappy(dfs,函数(x){
names(x)第一个示例失败--抱怨没有找到模式“function”的“Object'Alpha'”--但第二个示例有效!谢谢!@jbfink抱歉,应该有~
立即尝试@akrun还有一个问题--tibble实际上没有“保存”“当我执行映射函数时——执行这些映射中的任何一个,然后直接调用TIBLE(例如,只需在控制台中键入“df1”)显示旧列名。我如何修复它?@jbfink我在开会。忘记了tibbles_列表是一个字符向量。尝试使用list2env
更新会议。为什么你要列出数据帧的名称,而不仅仅是数据帧本身?例如tibbles_列表Hi camille--不知道。我可能正在做他犯了很多错误。
lst1 <- map(mget(tibbles_list), ~ .x %>%
rename_all(~ column_names))
list2env(lst1, .GlobalEnv)
map(mget(tibbles_list), ~ .x %>%
set_names(column_names))