我有一个基于某些医疗记录的大型数据集,所以由于隐私限制我无法发布样本,但我试图将一个数据框子化为多个。目标是将每个独特的设施作为自己的数据框架,以便我可以确定每个设施的效率。我尝试了下面的代码,其中df是数据框的名称,Name是我将给子集的名称,Location是变量" Facility"来自原始数据框:
ratefunct <- function(df, Name, Facility) {Name <- subset(df, Facility, == "Location")
Name <- within(Name, {rate <- <-cumsum(Complete)/ cumsum(Complete+Incomplete) })}
但似乎没有在我的环境中获得任何结果
答案 0 :(得分:3)
根据您的评论,听起来您正试图将split
的结果存储为单独的数据框。
您可以使用assign
dfL <- split(iris, iris$Species)
for (i in 1:length(dfL)){
assign(paste0("df_", names(dfL[i])), dfL[i])
# added the print line so you can see the names of the objects that are created
print(paste0("df_",names(dfL[i])))
}
[1] "df_setosa"
[1] "df_versicolor"
[1] "df_virginica"
这将创建数据框df_setosa
,df_virginica
和df_versicolor
或者,如果您对当前对象名称感到满意,则可以使用:
list2env(dfL,envir=.GlobalEnv)
使用列表中的对象名称将每个列表项目保存为对象。因此,您只需拥有df_
,setosa
和virginica
个对象,而不是versicolor
前缀。
编辑是一种为每个创建的对象分配自定义名称的简单方法,直接指定names
dfL
是一个不错的干净解决方案:
names(dfL) <- paste0("df_",names(dfL))
list2env(dfL,envir=.GlobalEnv)
这样您就可以避免编写for
循环,并且仍然可以获得带有有用前缀的对象名称。