将数据帧列表转换为R中的各个数据帧

时间:2015-05-28 20:18:24

标签: r list for-loop dataframe

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

我有一个大的数据框,我按因子划分。

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]])
}

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

5 个答案:

答案 0 :(得分:32)

尝试list2env(eqRegions,envir=.GlobalEnv)

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:3)

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

答案 3 :(得分:2)

作为替代方案,&#34;最佳实践&#34;分割这样的数据时,要将data.frames保留在列表中,如split所提供的那样。要处理它,您可以使用sapplylapply(多个因素)中的任何一个,并将输出捕获回列表中。例如:

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

这显然只有在你对每个data.frame做同样的事情时才有效。

如果你真的必须打破它们并独特地处理每个data.frame,那么@ MatthewPlourde&@和MaratTalipov的答案将会有效。

答案 4 :(得分:1)

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

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

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