我正在处理一个列表集合,这些列表包含深度嵌套的列表,除了以下事实之外,没有固定的结构:
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))))
))
)我需要将列表数据结构转换为表单的熔解(每一个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 (这将使数字叶节点保持完整)?unlist将创建的长名称以提取variation和variable值而不生成太多中间值的好方法是什么?不管unlist是否正确,我都想知道:
variation、variable和value向量或矩阵,然后将它们组合成一个数据帧,而不是逐行构建数据帧?plyr、reshape和ggplot一起使用。发布于 2012-12-18 10:42:50
有一个函数似乎不太被使用,叫做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" https://stackoverflow.com/questions/13930010
复制相似问题