我有以下列表,其中包含几个具有相同列名的数据框:
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
函数返回的对象可能无法满足我的尝试。
谢谢!
答案 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]]))