首页 > 解决方案 > 在多个数据集上更改 R 中的 colname

问题描述

我正在使用约 10 个数据集,需要更改列名以匹配所有数据集,每个数据集包含相同数量的列。目前这就是我正在做的事情,但我知道必须有一种更简洁的方式来输入它。

第 1 周到第 10 周是我正在使用的数据集。

colnames(week1) <- c("Itemsinfolder", "Foldersize (KB)", "Foldersubfoldersize (KB)", "User", "Level1folder", "Level2folder", "Level3folder", "Level4folder", "Level5folder")

colnames(week2) <- c("Itemsinfolder", "Foldersize (KB)", "Foldersubfoldersize (KB)", "User", "Level1folder", "Level2folder", "Level3folder", "Level4folder", "Level5folder")

colnames(week3) <- c("Itemsinfolder", "Foldersize (KB)", "Foldersubfoldersize (KB)", "User", "Level1folder", "Level2folder", "Level3folder", "Level4folder", "Level5folder")

colnames(week4) <- c("Itemsinfolder", "Foldersize (KB)", "Foldersubfoldersize (KB)", "User", "Level1folder", "Level2folder", "Level3folder", "Level4folder", "Level5folder")

等到第 10 周

谢谢

标签: rloopsdataset

解决方案


我们可以通过将数据集保存在 a 中并使用首选名称 ('vec')list更改列名来立即执行此操作。vector如果我们需要更改全局环境中的对象,请使用list2env(不过,最好将其保留在list

lst <- lapply(mget(paste0("week", 1:10)), setNames, vec)
list2env(lst, envir = .GlobalEnv)

另一种选择是assignfor循环中

wks <- paste0("week", 1:10)
for(wk in wks) assign(wk, `names<-`(get(wk), vec))

使用可重现的示例

week1 <- data.frame(col1 = 1:5, col2 = 6:10)
set.seed(24)
week2 <- data.frame(col1 = rnorm(5), col2 = rnorm(5))
wks <- paste0('week', 1:2)
vec <- paste0("V", 1:2)
for(wk in wks) assign(wk, `names<-`(get(wk), vec))

数据

vec <- c("Itemsinfolder", "Foldersize (KB)", "Foldersubfoldersize (KB)", "User", 
  "Level1folder", "Level2folder", "Level3folder", "Level4folder", "Level5folder")

推荐阅读