Sim*_*Sim 5 performance r bigdata dataframe reshape2
我正在处理一个列表集合,其中包含深度嵌套的列表,除了以下事实之外没有固定的结构:
variations例如:
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))))
))
)
Run Code Online (Sandbox Code Playgroud)
我需要将列表数据结构转换为表单的熔化(每个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)
)
Run Code Online (Sandbox Code Playgroud)
或者我可以执行快速分组和过滤的其他数据结构.
数据结构中有数百万个节点.该集合可以包含数千个条目,每个条目具有数万个变体,其中2-10个叶子节点具有未知名称.
我正在寻找有关如何快速从集合中构建数据框的建议.
一种方法是使用unlist源数据来压缩列表,但我不确定以下内容:
我应该运行unlist整个数据结构,它将叶子数字节点转换为字符串(我将需要将其解析为数字)或者我应该unlist在每个变体上使用(这将使数字叶节点保持完整)?
什么是解析unlist将创建提取variation和variable值而不产生太多中间值的长名称的好方法?
无论是否unlist正确的方式,我想知道:
构建单独的variation,向量或矩阵然后将它们组合成数据帧是否更好,variable而value不是逐行构建数据帧?
我应该不使用数据帧,而是使用另一种更快的数据结构来处理这类数据吗?无论我最终使用什么,都需要转换为数据帧才能使用plyr,reshape和ggplot.
有一个似乎不太常用的函数,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"
Run Code Online (Sandbox Code Playgroud)