R 更改命名数据帧的df列名

R 更改命名数据帧的df列名,r,R,我正在尝试创建一个脚本,该脚本将循环遍历一些数据帧,并将它们的列名更改为小写 firmNames <- c("file1","file2","file3","file4","file5") for(i in 1:length(firmNames)){ fileName <- paste("data/",firmNames[i],".RData",sep="") load(fileName) upper <- names(get(firmNames[i])

我正在尝试创建一个脚本,该脚本将循环遍历一些数据帧,并将它们的列名更改为小写

firmNames <- c("file1","file2","file3","file4","file5")
for(i in 1:length(firmNames)){
    fileName <- paste("data/",firmNames[i],".RData",sep="")
    load(fileName)
    upper <- names(get(firmNames[i]))
    lower <- tolower(upper)  # transforms to lower case
    names(get(firmNames[i])) <- lower  # This is the offending line
    save(get(firmNames[i]), file = fileName)
}

奇怪的是,打印
names(get(firmNames[i])
lower
一样可以完美地显示。它们都是模式特征。我遗漏了什么?

一个简单、可读且保持健全的解决方案是将要修改的
data.frame
指定给一个临时对象(此处名为
X
)。进行此操作,当您将其成形后,使用正确修改的对象覆盖原始对象:

# SETUP
firmNames <- c("file1","file2","file3","file4","file5")
file1 <- data.frame(ALLIGATOR=1:4, BLUEBIRD=rnorm(4))

file1
#   ALLIGATOR    BLUEBIRD
# 1         1 -0.37122263
# 2         2 -0.13939213
# 3         3 -0.79044157
# 4         4 -0.06837244


# MODIFY COLUMN NAMES
for (i in 1) {
    X <- get(firmNames[i])
    names(X) <- tolower(names(X))
    assign(firmNames[i], X)
}

file1
#   alligator    bluebird
# 1         1 -0.37122263
# 2         2 -0.13939213
# 3         3 -0.79044157
# 4         4 -0.06837244
#设置

正是出于这个原因,firmNames将它们作为单独的变量保存是一件令人头痛的事情。我更愿意
rbind
将它们全部绑定到一个数据帧中,然后简单地使用
firmNames
作为另一个ID变量。然后你就可以使用plyr/ggplot2了,如果需要的话,你可以用
子集
将一家公司分割出来。谢谢-这可能会让以后的生活更轻松。(仅供参考,我一直将它们分开,因为它们都是相当大的数据。框架,而且我从来没有出于任何原因真正想一起分析公司。)谢谢-这就解决了指定列名的问题。您将如何保存该文件?赋值行(firmNames[i],X)似乎不起作用-firmNames[i]打印出“file1”。当我试图保存firmNames[i]时,我得到一个找不到的对象。这应该可以正常工作
assign()
要求它的第一个参数是以字符串形式给出的变量名。(尝试类似的方法以查看是否有效:
assign(“MY_NAME”,“Bernardo”);MY_NAME
以查看是否有效。同样地,
save()
可以将要保存的对象的名称作为字符串。这很有效-您的代码也可以完美地工作。但是当我添加save时(firmNames[I],file=“file.RData”)对于循环,我得到了一个未找到的对象错误。好吧--我看到了试图保存该对象的问题。因为
save()
接受字符串或符号,它试图解释
firmNames[I]
,但找不到名称非常奇怪的对象。这应该可以帮您完成任务:
do.call(save,list)(firmNames[1],file=fileName))
是的!非常感谢Josh。我现在将查找这个do.call函数!