一次创建多个子集

时间:2018-04-24 20:22:12

标签: r function subset

我有一个基于某些医疗记录的大型数据集,所以由于隐私限制我无法发布样本,但我试图将一个数据框子化为多个。目标是将每个独特的设施作为自己的数据框架,以便我可以确定每个设施的效率。我尝试了下面的代码,其中df是数据框的名称,Name是我将给子集的名称,Location是变量" Facility"来自原始数据框:

ratefunct <- function(df, Name, Facility) {Name <- subset(df, Facility, == "Location")
Name <- within(Name, {rate <- <-cumsum(Complete)/ cumsum(Complete+Incomplete) })}

但似乎没有在我的环境中获得任何结果

1 个答案:

答案 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_setosadf_virginicadf_versicolor

或者,如果您对当前对象名称感到满意,则可以使用:

list2env(dfL,envir=.GlobalEnv)

使用列表中的对象名称将每个列表项目保存为对象。因此,您只需拥有df_setosavirginica个对象,而不是versicolor前缀。

编辑是一种为每个创建的对象分配自定义名称的简单方法,直接指定names dfL是一个不错的干净解决方案:

names(dfL) <- paste0("df_",names(dfL))
list2env(dfL,envir=.GlobalEnv)

这样您就可以避免编写for循环,并且仍然可以获得带有有用前缀的对象名称。