R 如何更改数据帧的名称

R 如何更改数据帧的名称,r,dataframe,dplyr,R,Dataframe,Dplyr,我经常遇到这样的情况,我在一个长的R代码集的顶部设置一个值,用于对一个或多个数据帧进行子集设置。大概是这样的: city_code <- "202" head(get(gear_subset)) 事实是R中的对象本身没有名称。存在不同类型的环境,包括针对每个进程的全局环境。这些环境具有指向各种对象的名称列表。两个不同的名称可以指向同一个对象。这在哈德利·威克汉姆的《高级R》一书中的环境一章中得到了最好的解释 因此,无法更改数据帧的名称,因为没有什么可以更改的 但是,只需执行以下操作,

我经常遇到这样的情况,我在一个长的R代码集的顶部设置一个值,用于对一个或多个数据帧进行子集设置。大概是这样的:

city_code <- "202"
head(get(gear_subset))

事实是R中的对象本身没有名称。存在不同类型的环境,包括针对每个进程的全局环境。这些环境具有指向各种对象的名称列表。两个不同的名称可以指向同一个对象。这在哈德利·威克汉姆的《高级R》一书中的环境一章中得到了最好的解释

因此,无法更改数据帧的名称,因为没有什么可以更改的

但是,只需执行以下操作,即可使新名称(如
newname
)指向与给定名称(如
oldname
)相同的对象(在本例中为数据帧对象):

   newname <- oldname
如往常一样,有关详细信息,请参阅
分配的帮助

编辑: 在回答您的编辑和关于使用
eval(parse(…)
时出现的问题的各种评论时,您可以这样解析名称:

city_code <- "202"
head(get(gear_subset))
通常,您不应该在全局环境中以编程方式为数据帧生成名称。这表明您应该使用
list
来简化您的生活。有关许多示例和更多讨论,请参阅常见问题解答

使用您的具体示例,我将用几种不同的方法之一重写它

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 = ""))
但您这样编码可能是因为您希望对
gear
的每个值进行编码,而这正是
dplyr
group\u by
帮助的地方:

所有档位的CSV 每个档位的数据框: 如果您真的希望每个档位都有单独的数据框对象,那么将它们保存在列表中是一种方法

gear_df = split(mtcars, mtcars$gear)
这将为您提供一个包含三个数据帧的
列表
,每一个数据帧对应一个
齿轮
。它们已经用级别命名,因此要查看包含所有
齿轮==4行的数据帧,请执行以下操作:

gear_df[["4"]]

一般来说,这比三个浮动的数据帧更容易处理。要对所有数据帧执行任何操作,都可以使用一个
lappy
,即使要对
循环使用
,也比
eval(parse())
get()简单

可能需要指定要分配到的环境:
assign(city\u results,df,pos=1)
assign(city\u results,df,envir=.GlobalEnv)
谢谢@mike wise。你已经回答了我的问题。(我以前曾以烹饪书的方式使用过parse,但现在我正在研究帮助文件。非常有用。:-)
eval(parse(…)
在您想要解析执行某些操作的代码时非常有用。对于简单地访问名称为字符串的对象,
get
是一个很好的快捷方式,例如,
head(get(gear_子集))
而不是'head(eval(parse(text=gear_子集)))大多数时候,你不需要
get
,如果你经常使用
eval(parse(text=“…”)
,那么你真的做错了。
eval(parse(…)
在大多数情况下被公认为是不好的做法,所以我不喜欢用这种方式指新手。例如,参见
fortunes::fortune(106)
财富::财富(181)
,同样,尽管讨论的重点更多地放在它的实际使用是有保证的情况下,但不像这里有一个简单的替代方案。嗨,约翰。我在回答你的问题时添加了一条评论。我知道这很旧,但对于可能需要它的人来说,最后一行只需要是
头(get(gear_subset))
assign
的反面是
get
。次要点:粘贴(“mtcars”,gear,sep=”)可以稍微缩短为粘贴0(“mtcars”,gear,sep=”)。sep的快捷方式为“”选项。有点取决于具体的意图,但是的,这确实感觉像它可能是什么。但是我不记得我在2015年7月编程了什么,我有点想知道JDS是否也能。谁知道呢,但对于浏览网站的人来说,就像对于原始的询问者一样,这也是一个或更多的参考。我看到了问题n被你先前的编辑打断了,想把我的两分钱投进去。
gear_code <- 4
mtcars %>% filter(gear == gear_code) %>%
    write.csv(file = paste0('mtcars_', gear_code, '.csv'))
mtcars %>% group_by(gear) %>%
  do(csv = write.csv(file = sprintf("mt_gear_%s.csv", .[1, "gear"]), x = .)
gear_df = split(mtcars, mtcars$gear)
gear_df[["4"]]