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

Output

[[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

R相关问答推荐

导入到固定列宽的R中时出现问题

无法在我的情节中表现出显着的差异

如何将在HW上运行的R中的消息(错误、警告等)作为批处理任务输出

以R中的正确顺序将日期时间字符列转换为posixct

从gtsummary包中使用tBL_strata()和tBL_summary()时删除变量标签

更改编号列表的 colored颜色

如何按排序顺序打印一个框架中所有精确的唯一值?

如何在xyplot中 for each 面板打印R^2

多个过滤器内的一个盒子在仪表板Quarto

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

R Select()可以测试不存在的子集列

从多个线性回归模型中提取系数

合并后返回列表的数据帧列表

当我添加美学时,geom_point未对齐

R如何将列名转换为更好的年和月格式

将多个变量组合成宽格式

R中时间间隔的大向量与参考时间间隔的相交

根据r中另一个文本列中给定的范围对各列求和

R try Catch in the loop-跳过缺少的值并创建一个DF,显示跳过的内容

将仪表板中的值框大小更改为Quarto