gpt4 book ai didi

performance - R 中的高性能大数据处理

转载 作者:行者123 更新时间:2023-12-03 01:29:05 24 4
gpt4 key购买 nike

我正在处理一个列表集合,其中包含深度嵌套的列表,除了以下事实之外没有固定结构:

  1. 第 1 级列表有一个名为 variations 的元素
  2. 层次结构中的所有叶数据都是数字。

例如:

list(
list(variations = list(
'12' = list(x = c(a = 1))
)),
list(variations = list(
'3' = list(x = c(a = 6, b = 4)),
'abcd' = list(x = c(b = 1), m = list(n = list(o = c(p = 1023))))
))
)

我需要将列表数据结构转换为以下形式的融化(根据reshape)数据帧

data.frame(
variation = c( '12', '3', '3', 'abcd', 'abcd'),
variable = c('x.a', 'x.a', 'x.b', 'x.b', 'm.n.o.p'),
value = c( 1, 6, 4, 1, 1023)
)

或其他我可以执行快速分组和过滤的数据结构。

数据结构中有数百万个节点。该集合可以有数千个条目,每个条目有数万个变体,其中有 2-10 个以上名称未知的叶节点。

我正在寻找有关如何快速从集合中构建数据框的建议。

一种方法是在源数据上使用 unlist 来展平列表,但我不确定以下内容:

  • 我应该在整个数据结构上运行unlist,这会将叶数字节点转换为字符串(然后我需要将其解析回数字)还是应该使用取消列出每个变体(这将使数字叶节点保持不变)?

  • 解析 unlist 将创建的长名称以提取 variationvariable 值而不生成太多值的好方法是什么中间值?

无论unlist是否是正确的方法,我想知道:

  • 是否最好构建单独的variationvariablevalue向量或矩阵,然后将它们组合成一个数据帧,如下所示反对逐行构建数据框?

  • 我是否应该使用数据帧而使用另一种更快的数据结构来处理此类数据?无论我最终使用什么,都需要可转换为数据帧,以便与 plyrreshapeggplot 一起使用。

最佳答案

有一个似乎不太常用的函数,称为rapply,它对列表进行递归操作。我不知道它有多快(基于lapply,所以可能不可怕,但也不惊人),而且使用起来很棘手。但值得考虑,如果只是为了优雅。

这是其使用的一个基本示例:

> rapply( test, classes="numeric", how="unlist", f=function(var) data.frame(names(var),var) )
variations.12.x.names.var. variations.12.x.var variations.3.x.names.var.1 variations.3.x.names.var.2 variations.3.x.var1
"a" "1" "a" "b" "6"
variations.3.x.var2 variations.abcd.x.names.var. variations.abcd.x.var variations.abcd.m.n.o.names.var. variations.abcd.m.n.o.var
"4" "b" "1" "p" "1023"

关于performance - R 中的高性能大数据处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13930010/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com