回忆循环内的不同数据名称

时间:2017-03-02 13:03:40

标签: r

这里是我如何使用名称data_1,data_2,data_3 .....等创建数量的数据集 最初的 dim(data)< - 500(rows)17(column)matrix

for ( i in 1:length(unique( data$cluster ))) {
  assign(paste("data", i, sep = "_"),subset(data[data$cluster == i,]))
}

到目前为止一切都很好

现在我试图在其他循环中逐个使用这些,如

for (i in 1:5) {
  data<-  paste(data, i, sep = "_")
}

然而,这并没有给我所需格式的数据 任何帮助将非常感激。

提前谢谢

1 个答案:

答案 0 :(得分:1)

让我在这里给你一个提示:不要只是在全局环境中分配所有内容,而是使用列表。这样你就可以避免在干预全球环境时出现的所有问题。您在问题中使用的代码将覆盖原始数据集data,因此如果您想在出现问题时重新运行该代码,则会遇到麻烦。您必须重建原始数据框。

第二:如果您需要根据因素拆分数据框并在每个部分上执行一些代码,您应该查看splitbytapply,或者在plyrdplyr个包裹。

使用Base R

使用基数R,取决于您想要做什么。在最常见的情况下,您可以使用split()lapply甚至是for循环的组合:

mylist <- split( data, f = data$cluster)
for(mydata in mylist){
  head(mydata)
  ...
}

或者

mylist <- split( data, f = data$cluster)
result <- lapply(mylist, function(mydata){
  doSomething(mydata)
})

您使用哪一个,很大程度上取决于结果应该是什么。如果您需要为每个子集提供某种摘要,则使用lapply将为您提供包含每个子集的结果的列表。如果您需要进行模拟或绘图等,最好使用for循环。

如果你想根据其他变量添加一些变量,那么plyrdplyr包就派上用场了

使用plyr和dplyr

如果您的代码的结果将是某种类型的数组或数据框,这些包特别方便。这与使用splitlapply类似,但后来Hadley批准: - )

例如:

library(plyr)
result <- ddply(data, .(cluster),
                function(mydata){
                  doSomething(mydata)
                })

如果结果应该是列表,请使用dlply