重命名列表中数据集中的变量(列)

标签 r list dataframe variables rename

我有一个包含不同变量的数据集列表。我需要根据下面的 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/

相关文章:

r - 仅在 Shiny 应用不忙时激活 actionButton

创建二维数组并设置值

r - 如何使用 Stringr 检查向量是否包含 R 中的数字?

python - Pandas 在两个数字之间填充 nan

python - Pandas :加入有条件的数据框

python - 由于数据库输入错误而切换到特定类别的列

c++ - 使用 Rcpp 在 R 中使用矩阵是否有限制?

html - 多个UL的级别不一样

java - 为什么 Collections.sort (dateList,Collections.reverseOrder()) 会抛出 NPE

java - 从文件列表中删除文件