【问题标题】:Recall different data names inside loop在循环中调用不同的数据名称
【发布时间】:2017-07-22 05:31:01
【问题描述】:

这是我如何创建名称为 data_1、data_2、data_3 .....等等的数据集 对于初始 暗淡(数据)

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 = "_")
}

但是这并没有给我所需格式的数据 任何帮助将不胜感激。

提前谢谢你

【问题讨论】:

  • 使用data &lt;- get(paste(data, i, sep = "_"))
  • 感谢您的快速回复。我期望输出也作为一个矩阵,这样 dim(get(paste(data, i, sep = "_")))
  • 您的第二个 for 循环告诉我您正在尝试将前 5 个数据集合并为一个?您可以编写 rbind(data_1, data_2, data_3, ...) 或先将数据集存储在列表中,然后使用 do.call(rbind, dataList) 组合数据集。我希望我理解正确。
  • @R_Learner 如果您在特定问题上需要帮助,您需要提供一个最小的可重现示例,如下所述:stackoverflow.com/questions/5963269/…
  • '@ Joris Meys' 非常感谢您的建议,下次我一定会牢记这些标准。谢谢

标签: r


【解决方案1】:

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

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

使用基础 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,但在某种程度上是哈德利认可的:-)

例如:

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

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

【讨论】:

  • 这正是我所需要的。事实上可能以最精确的方式。非常感谢。:)
猜你喜欢
  • 1970-01-01
  • 2016-10-11
  • 2018-09-25
  • 2020-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-11
  • 2021-04-16
  • 1970-01-01
相关资源
最近更新 更多