重命名循环R中的列

时间:2018-07-31 15:19:36

标签: r loops

我尝试搜索如何在循环中重命名多个数据帧的列,但找不到统一的答案。假设我有4个数据帧,每个帧有2列。我想在所有4个数据帧中将每个y1列重命名为“数字”,将每个y2列重命名为“值”。我知道可以通过创建列表来做到这一点,但是我想直接为该数据框更改列的名称,而不是作为数据框列表值(例如df_list [[1]])。当我使用以下代码时,我会得到这种类型的结果:

df_list <- list(d1, d2, d3, d4)

for (i in 1:length(df_list)){
  colnames(df_list[[i]]) <- c("number", "value")
}

数据帧:

d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))
d2 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))
d3 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))
d4 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))

1 个答案:

答案 0 :(得分:3)

最简单的是setNames

lapply(df_list, setNames, c("number", "value"))

如@Parfait所述,最好将对象放在list中,而不要在全局环境中更改对象,但是如果list名称也是对象名称,则可以这样做< / p>

list2env(lapply(mget(paste0("d", 1:4)), setNames, 
         c("number", "value")), envir = .GlobalEnv)
names(d1)
#[1] "number" "value" 

或使用for循环

for(nm in paste0("d", 1:4)) assign(nm, `names<-`(get(nm), c("number", "value")))