首页 > 解决方案 > R:为多个列的名称添加后缀

问题描述

我需要通过在每列的名称中添加相同的后缀来重命名 R 中的几列。我可以通过每次复制重命名函数并替换变量名来做到这一点,但我想使用更优雅的解决方案。

此外,我正在为三个不同的数据框执行此操作,这些数据框都具有我需要重命名的相同列,因此这使我的代码更长。理想情况下,我会将所有这些都放在一个简短的 for 循环或类似的东西中。这是我所拥有的:

# data frames df1, df2, df3, columns a, b, c, and d:
df1 <- rename(df1, "a.df1" = a)
df1 <- rename(df1, "b.df1" = b)
df1 <- rename(df1, "c.df1" = c)
df1 <- rename(df1, "d.df1" = d)

df2 <- rename(df2, "a.df2" = a)
df2 <- rename(df2, "b.df2" = b)
df2 <- rename(df2, "c.df2" = c)
df2 <- rename(df2, "d.df2" = d)

df3 <- rename(df3, "a.df3" = a)
df3 <- rename(df3, "b.df3" = b)
df3 <- rename(df3, "c.df3" = c)
df3 <- rename(df3, "d.df3" = d)

这适用于按我想要的方式重命名列,但我希望它看起来更像:

for (i in list(df1, df2, df3)) {
    for (j in c("a", "b", "c", "d")) {
        rename(i, "j.i" = j)
    }
}

我已经尝试了这个循环的几个版本,但无法让它工作。有人有解决办法吗?

标签: rfor-looprename

解决方案


df1 %>% rename_with(.fn = ~paste0(., ".df1"), .cols = c("a", "b", "c", "d"))

对于多个数据框,您应该先将它们放在一个列表中。

df_list = list(df1 = df1, df2 = df2, df3 = df3)
for(df_name in names(df_list)) {
  df_list[[df_name]] = df_list[[df_name]] %>%
    rename_with(.fn = ~paste(., df_name, sep = "."), .cols = c("a", "b", "c", "d"))
}

推荐阅读