我有一个包含不同变量的数据集列表。我需要根据下面的 name
数据框中的命名约定重命名它们。
df1 <- data.frame(x1= c(1,2,3), x2=c(1,2,3))
df2 <- data.frame(x1= c(1,2,3), x3=c(1,2,3))
df3 <- data.frame(x4= c(1,2,3), x5=c(1,2,3))
mylist <- list(df1,df2,df3)
name <- data.frame(old= c("x1","x2","x3","x4","x5"), new=c("A","B","A","A","C"))
我可以一项一项地完成此操作,但我想知道如何更有效地一次重命名它们
newdf <- map_if(mylist, ~ "x1" %in% colnames(.x),
.f = list(. %>% rename("A"="x1")))
我希望这样的事情会起作用,但事实并非如此:
for (i in nrow(name)) {
newdf <- map_if(mylist, ~ name[i,1] %in% colnames(.x),
.f = list(. %>% rename(name[2] = name[1])))
}
最佳答案
您可以使用 data.table
中的 setnames
,它可以获取旧名称和新名称的列表。
library(data.table)
library(purrr)
map(mylist, ~ setnames(.x, name$old, name$new, skip_absent=TRUE))
输出
[[1]]
A B
1 1 1
2 2 2
3 3 3
[[2]]
A A
1 1 1
2 2 2
3 3 3
[[3]]
A C
1 1 1
2 2 2
3 3 3
关于重命名列表中数据集中的变量(列),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73075499/