【发布时间】:2013-08-22 09:05:27
【问题描述】:
我正在尝试重命名多个 data.frames 的列。
举个例子,假设我有一个 data.frames dfA、dfB 和 dfC 的列表。我写了一个函数changeNames来相应地设置名称,然后使用lapply如下:
dfs <- list(dfA, dfB, dfC)
ChangeNames <- function(x) {
names(x) <- c("A", "B", "C" )
}
lapply(dfs, ChangeNames)
但是,这并没有按预期工作。似乎我没有将新名称分配给data.frame,而只是创建新名称。我在这里做错了什么?
提前谢谢你!
【问题讨论】:
-
在函数中的
names(x) <-行之后,添加return(x)或直接添加x。否则,您只会返回names(x)。 -
感谢您的回复阿伦!如果我添加 return(x),我将得到一个带有新名称的 dfA、dfB 和 dfC。但是,如果我之后查看名称(dfA)、名称(dfB)和名称(dfC),它们仍然具有旧的列名。我的数据框也很大,所以我没兴趣查看它们。只更改那里的列名。
-
lapply不会修改输入。这里没有发生“参考更改”。一切都在副本上完成。您必须将结果分配回去。做:dfs <- lapply(dfs, ChangeNames) -
好的,dfs 现在是一个包含 dfA、dfB 和 dfC 的大列表,并带有新的列名。我仍然对单独使用 dfA、dfb 和 dfC 感兴趣,并且单独使用它们仍然具有旧的列名?如何将结果分配回各个数据帧?
-
好吧,你应该把它们分配回去。
dfA <- dfs[[1]]... ?