R 同时重命名列表中存储的数据帧中的多个列

R 同时重命名列表中存储的数据帧中的多个列,r,R,我有以下列表,其中包含多个数据帧,它们都具有相同的列名: my_list <- list(df1 = data.frame(A = c(1:3), B = c(4:6), C = c(7:9)), df2 = data.frame(A = c(1:4), B = c(5:8), C = c(9:12)), df3 = data.frame(A = c(1:5), B = c(6:10), C = c(11:15))) 可

我有以下列表,其中包含多个数据帧,它们都具有相同的列名:

my_list <- list(df1 = data.frame(A = c(1:3), B = c(4:6), C = c(7:9)), 
                df2 = data.frame(A = c(1:4), B = c(5:8), C = c(9:12)), 
                df3 = data.frame(A = c(1:5), B = c(6:10), C = c(11:15)))
可能会工作,但我认为我偏离了正轨,
lappy
函数返回的对象可能不适用于我尝试执行的操作


谢谢

我们可以使用
map
循环查看
列表
,并使用
rename\u at将名为“A”的列重命名为“new\u name”

library(purrr)
library(dplyr)
map(my_list, ~ .x %>% 
                   rename_at(vars("A"), ~ "new_name"))

或者通过使用匿名函数调用使用
base R

lapply(my_list, function(x) {names(x)[names(x) == "A"] <- "new_name"; x})

lapply(我的列表,函数(x){names(x)[names(x)==“A”]还有一些基本选项:

# rename first column name
lapply(my_list, function(x) setNames(x, replace(names(x), 1, "new_name_for_A")))

# rename column named "A"
lapply(my_list, function(x) setNames(x, replace(names(x), names(x) == "A", "new_name_for_A")))

# lowly for loop
for (i in seq_along(my_list)) {
  names(my_list[[i]])[names(my_list[[i]]) == "A"] = "new_name_for_A"
}
怎么样

new.names = c('New', 'B', 'C')
lapply(my_list, `names<-`, new.names)

与此非常相似,也值得问一个问题:如果所有的数据帧都有相同的列,为什么不将它们合并到一个数据帧中?@Gregor:不幸的是,数据帧需要保持分离。我可能只需要在
for
循环方法中添加另一行。你可能可以对命名向量做一些聪明的事情,例如。,
name\u map=c(“A”=“new\u A”,“B”=“new\u B”)
。这取决于具体情况。是否需要重命名的列数是动态的?您能指望列顺序是一致的吗?(这是关于多次重命名的删除注释)对于“所有数据帧都有相同的列名”的OP来说非常简单和完美。
new.names = c('New', 'B', 'C')
lapply(my_list, `names<-`, new.names)
new.names = sub('B', 'New', names(my_list[[1]]))