将数据帧列表转换为R中的单个数据帧[重复]
Posted
技术标签:
【中文标题】将数据帧列表转换为R中的单个数据帧[重复]【英文标题】:Converting a list of data frames into individual data frames in R [duplicate] 【发布时间】: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]])
我认为关键是在循环之前定义区域,但它会不断覆盖自身而不是递增。非常感谢。
【问题讨论】:
【参考方案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
提供的那样。要处理它,您可以使用sapply
或lapply
之一(许多因素)并将输出捕获回列表中。例如:
eqRegionsProcessed <- lapply(eqRegions, function(df)
## do something meaningful here
)
这显然只有在您对每个 data.frame 执行相同操作时才有效。
如果您真的必须将它们分解并唯一地处理每个 data.frame,那么 @MatthewPlourde 和 @MaratTalipov 的答案将起作用。
【讨论】:
【参考方案5】:attach(eqRegions)
应该足够了。但我建议使用lapply
以list
的形式与他们合作。我保证它会产生更简单的代码。
【讨论】:
这会将列表放在您的搜索路径中,因此变量不会显示为ls
,但在您评论中的示例中,您可以使用`8
`获得8
。
嗨,马修,对不起,我删除了评论,转贴:我不太明白这是如何工作的:例如s <- split(mtcars, mtcars$cyl); attach(s)
。使用ls()
不会出现,使用'8'
不会给出决赛桌(如果我标记了 cyl 级别字母[1:3],它确实有效
要引用具有非标准名称的变量,例如以数字开头的变量,请将名称用反引号而不是引号括起来。以上是关于将数据帧列表转换为R中的单个数据帧[重复]的主要内容,如果未能解决你的问题,请参考以下文章
对于要求,我需要通过从该数据帧的列中的列表中的值创建行来将数据帧转换为 [重复]