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函数!