在 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)
您可以使用 setNames
和 assign
来命名列 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")))
考虑
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)
您可以使用 setNames
和 assign
来命名列 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")))