同时重命名列表中存储的数据框中的几列

时间:2019-02-22 20:48:02

标签: 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)))

是否有一种有效的方法可以使用基本R函数同时重命名列表中每个数据框中的所有列A

我在想类似的东西

names(lapply(my_list, `[[`, "A")) <- "new_name"

可能有效,但我认为我偏离了轨道-lapply函数返回的对象可能无法满足我的尝试。

谢谢!

3 个答案:

答案 0 :(得分:2)

我们可以使用map遍历list,并用rename_at将名为“ A”的列重命名为“ new_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})

答案 1 :(得分:2)

更多基本选项:

# 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"
}

答案 2 :(得分:2)

怎么样

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

对于编辑中添加的示例,只需将其更改为

new.names = sub('B', 'New', names(my_list[[1]]))