有效地在 R 中将列表列表放入 data.frame
list of lists into data.frame in R efficiently
我有一个列表列表 (qlist),qlist 中有不同长度的列表(参见示例 - 标签列表),我想转换选定的元素(标签和 question_id,跳过 creation_date) 到 data.frame,其中标签是 1 列,第二列是对应的 question_id.
qlist <- list()
qlist[[1]] <- list(tags = list( "r", "parallel-processing"), creation_date = "1459613802",
question_id = "36375667")
qlist[[2]] <- list(tags = list( "r"), creation_date = "1459613803", question_id = "36375668")
我已经用下面的代码做到了
library(plyr)
df_qst_tags <- ldply(qlist, function(x){ as.data.frame(cbind(tag = unlist(x$tags), question_id = x$question_id)) }, .progress = "win")
结果如预期:第一列中的标签与第二列中相应的 question_id。
> df_qst_tags
tag question_id
1 r 36375667
2 parallel-processing 36375667
3 r 36375668
不幸的是我的 qlist 非常大而且我的代码太慢了。如何以更高效的方式重写解决方案?
提取标签并找到它们的几何结构
> tags = lapply(qlist, "[[", "tags")
> lengths(tags)
[1] 2 1
您将取消列出 tags
以获得单个标签的向量。现在提取其他元素,例如 question_id,并按照
的行通过标签几何体复制每个元素
data.frame(tag=unlist(tags, use.names=FALSE),
question_id = rep(
vapply(qlist, "[[", character(1), "question_id"),
lengths(tags)))
我有一个列表列表 (qlist),qlist 中有不同长度的列表(参见示例 - 标签列表),我想转换选定的元素(标签和 question_id,跳过 creation_date) 到 data.frame,其中标签是 1 列,第二列是对应的 question_id.
qlist <- list()
qlist[[1]] <- list(tags = list( "r", "parallel-processing"), creation_date = "1459613802",
question_id = "36375667")
qlist[[2]] <- list(tags = list( "r"), creation_date = "1459613803", question_id = "36375668")
我已经用下面的代码做到了
library(plyr)
df_qst_tags <- ldply(qlist, function(x){ as.data.frame(cbind(tag = unlist(x$tags), question_id = x$question_id)) }, .progress = "win")
结果如预期:第一列中的标签与第二列中相应的 question_id。
> df_qst_tags
tag question_id
1 r 36375667
2 parallel-processing 36375667
3 r 36375668
不幸的是我的 qlist 非常大而且我的代码太慢了。如何以更高效的方式重写解决方案?
提取标签并找到它们的几何结构
> tags = lapply(qlist, "[[", "tags")
> lengths(tags)
[1] 2 1
您将取消列出 tags
以获得单个标签的向量。现在提取其他元素,例如 question_id,并按照
data.frame(tag=unlist(tags, use.names=FALSE),
question_id = rep(
vapply(qlist, "[[", character(1), "question_id"),
lengths(tags)))