如何有效地将数据帧转换为任意长度的列表列表?

时间:2016-04-06 05:35:43

标签: r

我正在尝试重塑数据框,以便更有效地存储和检索。每行包含一个“父”(键)值,它在行之间不是唯一的,而是一个子值(实际上,一组3个属性 - 1个字符和2个数字)。我想将此数据帧转换为一个列表,该列表只包含每个唯一父键的一个顶级条目,以及由与父项关联的子项数确定的多个子列表。以下是一些示例数据:

pcm <- data.frame(parent = c("middle", "middle", "might", "might", 
                     "might", "million", "million", "millions"),
              child = c("of", "school", "be", "have", "not", "in", 
                     "to", "of"),
              count = c(476, 165, 1183, 619, 321, 490, 190, 269))

此输出应该是一个包含4个顶级元素(名为"middle", "might", "million", "millions")的列表,以及具有命名成员$child$count的不同数量的子列表(例如{ {1}}包含子列表lookup4[["middle"]] = $children[[1]]$child"of" = $count476 = $children[[2]]$child"school" = $count)。

下面的代码有效,但速度非常慢(使用8 GB RAM的300,000行数据帧上有几个小时)。我对输出数据中的子项数量施加了6的限制,但它似乎并没有产生很大的不同。

165

我可以通过消除'for'循环加快速度吗?如果是这样,我将如何编码转换?

1 个答案:

答案 0 :(得分:0)

试试这个:

我认为数据框称为@Repository

parents

如果您希望父项的行名称是列表的名称:

parents.list <- as.list(as.data.frame(t(parents)))