r - 如何更改数据框的名称

标签 r dataframe dplyr

我有一个经常出现的情况,我在一组长的 R 代码的顶部设置了一个值,该代码用于对一个或多个数据帧进行子集化。像这样的东西:

city_code <- "202"

在整个过程结束时,我想将结果保存在一个适当命名的数据框中,例如,基于将“city_code”附加到一个公共(public) stub 。
city_results <- paste("city_stats", city_code, sep = "")

我的问题是我不知道如何将结果数据框重命名为“city_results”的值。那里有很多关于如何重命名数据框列的信息,但没有关于如何重命名数据框本身的信息。根据提议的答案,这里有一个澄清:

谢谢,@mike-wise。有助于研究手头有具体问题的 Hadley 的 Advanced R。
library(dplyr)
gear_code <- 4
gear_subset <- paste("mtcars_", gear_code, sep = "")
mtcars_subset <- mtcars %>% filter(gear == gear_code)
head(mtcars_subset)
write.csv(mtcars_subset, file = paste(gear_subset, ".csv", sep = ""))

这让我可以将子集写入一个适当命名的 csv 文件。但是,您的建议很有效,但我不能,例如,用新名称引用 data.frame:
assign(gear_subset, mtcars_subset)
head(gear_subset)

最佳答案

事实是,R 中的对象本身没有名称。存在不同类型的环境,包括每个进程的全局环境。这些环境具有指向各种对象的名称列表。两个不同的名称可以指向同一个对象。据我所知,这在 Hadley Wickhams Advanced R 书的环境章节中得到了最好的解释
http://adv-r.had.co.nz/Environments.html

所以没有办法改变数据框的名称,因为没有什么可以改变的。

但是您可以使一个新名称(如 newname )指向与给定名称(如 oldname )相同的对象(在您的情况下为数据框对象),只需执行以下操作:

   newname <- oldname

请注意,如果您更改其中一个变量,则会生成一个新副本,并且内部引用将不再相同。这是由于 R 的“修改时复制”语义。请参阅此帖子以获取说明:What exactly is copy-on-modify semantics in R, and where is the canonical source?

希望有帮助。我知道痛苦。动态和函数式语言不同于静态和过程语言......

当然,可以为数据帧计算一个新名称并将其注册到环境中,并使用 assign。命令 - 也许你正在寻找这个。然而,事后提及它会相当令人费解。

示例(假设 df 是有问题的数据帧):
   assign(  paste("city_stats", city_code, sep = ""), df )

一如既往地查看 assign 的帮助。更多信息http://stat.ethz.ch/R-manual/R-devel/library/base/html/assign.html

编辑:
回复您的编辑,以及有关使用 eval(parse(...) 问题的各种评论您可以像这样解析名称:
head(get(gear_subset))

关于r - 如何更改数据框的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31225715/

相关文章:

python - 从字符串中提取日期并保存在新的 pandas DataFrame 列中

r - 在 dplyr 的函数中使用变量名

r - 在特定条件下从数据框中提取行

xml - 使用 XML 数据的 R 中的“externalptr”错误

python - 如何使用 pandas 创建一个列来存储分组中首次出现的计数?

r - 在 R 中有效地将反斜杠转换为正斜杠

python - 如何添加基于 Pandas 中另一列的值的新列

r - dplyr 在变量子集上使用 pivot_longer 和 pivot_wider

r - 我可以在 R 中执行广义迭代缩放吗?

r - 将 Maven 用于 R 项目