为For循环调用存储在列表中的多个 Dataframe

vsdwdz23  于 2022-12-06  发布在  其他
关注(0)|答案(1)|浏览(171)

我不知道这是否可行,但我需要找到一个解决这个问题的方法。我有几个 Dataframe 存储在一个列表中,它们是由类似下面的东西生成的:

SSE <- list()
for (i in cms){
  SSE[[paste0("SE",i)]] <- subset(DF, DF$X == i)
}

这里cms是一个向量,它存储了我需要的DF$X值。所以我最终得到了一个SSE列表,它有很多 Dataframe ,我可以用SSE“SE 1”来举例。
现在我的问题是我想在另一个for循环中使用所有的 Dataframe 是SSE,但我不知道如何调用这些 Dataframe 。这是一个简单的例子,说明我想做什么:

for (i in cms){
    SSE[["SE[[i]]"]] <- arrange(SE[["SE[[i]]"]], y)
    SSE[["SE[[i]]"]][105,4] <- tail(na.omit(SSE[["SE[[i]]"]]$Nump),1)
}

我需要进行的实际操作比这要复杂得多,所以如果这实际上是不可行的,我会更容易单独重新创建每个 Dataframe ,而不是在列表中创建它们。
如果有人能告诉我如何在第二个for循环中调用这些列出的 Dataframe ,或者如何修改第一个for循环来单独创建这些 Dataframe (因为我认为我应该能够在第二个循环中调用这些 Dataframe ),我将非常感激。
感谢任何阅读这篇文章的人!

mspsb9vt

mspsb9vt1#

首先,没有看到你的数据样本,很难提供具体的建议。什么是SE,CMS和DF?
首先,你可以使用split()来避免循环分割初始 Dataframe ,然后使用lapply()来循环遍历列表,或者使用names(SSE)来获得列表元素名称的向量。

#using fake data
DF <- mtcars
cms <- unique(DF$cyl)

SSE <- list()
for (i in cms){
   SSE[[paste0("SE",i)]] <- subset(DF, DF$cyl == i)
}

#calling by names
for (i in names(SSE)){
   SSE[[i]] <- arrange(SSE[[i]], mpg)
   print(SSE[[i]])
}
  • 备选方案2*
#using split function
SSE2 <- split(DF, DF$cyl)

#using lapply
SSE2 <- lapply(SSE2, function(x){
   x <- arrange(x, mpg)
   print(x)
})

相关问题