【问题标题】:Converting a list of data frames into individual data frames in R [duplicate]将数据帧列表转换为R中的单个数据帧[重复]
【发布时间】:2015-08-11 12:54:25
【问题描述】:

我一直在寻找我认为简单的解决方案。

我有一个按因素拆分的大型数据框。

eqRegions <- split(eqDataAll, eqDataAll$SeismicRegion)

现在按区域创建数据框的列表对象;总共有8个。我想遍历列表以使用其他名称制作单个数据框。

我可以执行以下操作将列表项转换为单个数据框,但我认为如果我有很多因素,有一个循环机制会很快。

testRegion1 <- eqRegions[[1]]

testRegion3 <- eqRegions[[3]]

我可以手动执行上述操作,它可以很好地处理它,但如果我有很多区域,它效率不高。我想做的是相当于以下内容:

for (i in 1:length(eqRegions)) {
   region[i] <- as.data.frame(eqRegions[[i]])
}

我认为关键是在循环之前定义区域,但它会不断覆盖自身而不是递增。非常感谢。

【问题讨论】:

    标签: r list for-loop dataframe


    【解决方案1】:

    试试

    list2env(eqRegions,envir=.GlobalEnv)
    

    【讨论】:

      【解决方案2】:

      list2env 将数据帧返回到名称为列表中名称的全局环境。另一种方法是,如果您希望数据帧具有相同的名称但由循环中的 i 标识:

      for (i in 1:length(eqRegions)) {
        assign(paste0("eqRegions", i), as.data.frame(eqRegions[[i]]))
      }
      

      如果列表太长,这可能会很慢。

      【讨论】:

        【解决方案3】:

        这应该可行。创建的 data.frames 的名称将与 eqDataAll$SeismicRegion 中的名称相同。无论如何,不​​推荐这种填充单个 data.frames 的做法。我使用 R 的次数越多,我就越喜欢/使用列表。

        lapply(names(eqRegions), function(x) assign(x, eqRegions[[x]], envir = .GlobalEnv))
        

        编辑:使用 list2env 发布的解决方案。不知道list2env 功能。

        【讨论】:

        • 很抱歉投了反对票,但这太复杂了
        【解决方案4】:

        作为替代方案,当像这样拆分数据时,“最佳做法”是将 data.frames 保留在列表中,如 split 提供的那样。要处理它,您可以使用sapplylapply 之一(许多因素)并将输出捕获回列表中。例如:

        eqRegionsProcessed <- lapply(eqRegions, function(df) {
            ## do something meaningful here
        })
        

        这显然只有在您对每个 data.frame 执行相同操作时才有效。

        如果您真的必须将它们分解并唯一地处理每个 data.frame,那么 @MatthewPlourde 和 @MaratTalipov 的答案将起作用。

        【讨论】:

          【解决方案5】:

          attach(eqRegions) 应该足够了。但我建议使用lapplylist 的形式与他们合作。我保证它会产生更简单的代码。

          【讨论】:

          • 这会将列表放在您的搜索路径中,因此变量不会显示为ls,但在您评论中的示例中,您可以使用`8`获得8
          • 嗨,马修,对不起,我删除了评论,转贴:我不太明白这是如何工作的:例如s &lt;- split(mtcars, mtcars$cyl); attach(s)。使用ls() 不会出现,使用'8' 不会给出决赛桌(如果我标记了 cyl 级别字母[1:3],它确实有效
          • 要引用具有非标准名称的变量,例如以数字开头的变量,请将名称用反引号而不是引号括起来。
          猜你喜欢
          • 2019-01-16
          • 2023-01-21
          • 2018-08-19
          • 2021-11-16
          • 2020-06-14
          • 2014-06-04
          • 1970-01-01
          相关资源
          最近更新 更多