我尝试搜索如何在循环中重命名多个数据帧的列,但找不到统一的答案。假设我有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))
答案 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")))