在 lapply 中命名列

naming columns in lapply

考虑

a1<-data.frame(a=c(1,2),b=c(3,4))
a2<-data.frame(a=c(5,6),b=c(7,8))

我想将列重命名为 j 和 k。

我做到了

lapply(list(a1,a2),function(ct){names(ct)<-c("j","k")})

但旧的列名 a 和 b 仍然存在。有人可以帮忙吗?

如果你只有两个这样的dataframes,我们可以直接做:

names(a1) <- c("j","k")
names(a2) <- c("j","k")

如果我们有多个这样的数据框,我们可以使用 mget 将它们放入列表中,使用 lapply 更改名称,然后使用 list2env 将它们放入全局环境中.

listdf <- lapply(mget(paste0("a", 1:2)), function(ct) {names(ct)<-c("j","k");ct})
list2env(listdf, .GlobalEnv)

您可以使用 setNamesassign 来命名列 lapply:

invisible(lapply(c("a1", "a2"), function(ct) assign(ct,
   setNames(get(ct), c("j","k")), envir=.GlobalEnv)))
names(a1)
#[1] "j" "k"
names(a2)
#[1] "j" "k"

但使用 for 循环 可能更容易,例如:

for(ct in c("a1", "a2")) assign(ct, setNames(get(ct), c("j","k")))