【发布时间】:2016-11-13 15:47:08
【问题描述】:
在 R 中,我有几个具有相同结构的数据框(3 列和几行)。所有数据框都遵循相同的命名约定并具有相同的数据结构,因此可以使用ls(pattern="NamePrefix") 调用列出它们。
我想使用 for 循环来重命名所有这些数据帧的第二个和第三个变量。这是我尝试过的代码:
for (i in ls(pattern="NamePrefix"))
{
names(i)[[2]] <- "NewName"
names(i)[[3]] <- "OtherNewName"
}
我也尝试将数据框的名称设置为列表(File_List <- ls(pattern="NamePrefix")),然后在循环中使用该列表(for (i in File_List)),但这也不起作用。
无论我做什么,我都会收到此错误:
Error in names(i)[[2]] <- "NewName" :
'names' attribute [2] must be the same length as the vector [1]
但是,如果我只是简单地做names(SomeDataset)[[2]] <- "NewName",那效果很好。然而不知何故,for 循环似乎无法运行它。
关于它为什么会发生以及如何解决它的任何想法?请注意,我很清楚其他几种替代方法可以在不使用names() 的情况下对多个数据帧进行相同的循环重命名,但这是一种更简单、更直观的替代方法(我认为),我不明白为什么循环似乎无法实施。所以,现在我想了解为什么我认为最简单的解决方案似乎是错误的(如果可能,如何修复它以使其正常工作)。
提前致谢!
【问题讨论】:
-
首先,使用
names(df)[2] <- "someName"不要使用[[,因为它用于访问列表项。将相似的 data.frames 存储在列表中通常是有利的。请参阅this post,了解如何将 data.frames 放入列表中。特别是,gregor's answer there 提供了许多有用的方法来处理列表中的 data.frames。 -
感谢您的提示,以及对
[[使用的澄清 -
我应该澄清
[[在技术上大部分时间都适用于向量,但它可能会导致意想不到的后果,例如从向量中剥离属性。所以使用[通常是你想要做的。[[在处理列表时非常有用。
标签: r for-loop dataframe rename