r - 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)
}
}
我已经尝试了这个循环的几个版本,但无法让它工作。有人有解决办法吗?
解决方案
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"))
}
推荐阅读
- r - 如何使用 R 中另一个数据框中包含的值对数据框的列进行计算?
- r - 在嵌套数据中包含分组列
- javascript - 在数组循环中添加 settimeout 和 timeout
- sql-server - 我们可以在 Azure SQL 池中创建一个包含自动增量列的表吗?
- javascript - 在 javascript 中创建具有新结构的对象数组副本的最佳方法
- python - 如何修复错误“ModuleNotFoundError: No module named 'scrapy.contrib'”
- mysql - OQL 和 SQL 查询。选择所有员工工资相同的部门编号
- javascript - 是否可以从现有的 SVG 文件创建一个 DOM 节点(然后将其附加到某个 DOM 元素中)?
- python - splash:set_viewport_full() 在本地主机中工作正常,而当我运行scrapy代码时,它只保存了一半的图像
- prettier - 函数参数上更漂亮的换行符而不是解构变量