这里是我如何使用名称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 = "_")
}
然而,这并没有给我所需格式的数据 任何帮助将非常感激。
提前谢谢
答案 0 :(得分:1)
让我在这里给你一个提示:不要只是在全局环境中分配所有内容,而是使用列表。这样你就可以避免在干预全球环境时出现的所有问题。您在问题中使用的代码将覆盖原始数据集data
,因此如果您想在出现问题时重新运行该代码,则会遇到麻烦。您必须重建原始数据框。
第二:如果您需要根据因素拆分数据框并在每个部分上执行一些代码,您应该查看split
,by
和tapply
,或者在plyr
和dplyr
个包裹。
使用基数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
循环。
如果你想根据其他变量添加一些变量,那么plyr
或dplyr
包就派上用场了
如果您的代码的结果将是某种类型的数组或数据框,这些包特别方便。这与使用split
和lapply
类似,但后来Hadley批准: - )
例如:
library(plyr)
result <- ddply(data, .(cluster),
function(mydata){
doSomething(mydata)
})
如果结果应该是列表,请使用dlply
。