【发布时间】:2018-09-12 02:06:30
【问题描述】:
在时间序列列表列中使用purrr:map 后,我最终得到了一个 tibble 列表中的结果(我可能在这里有一些术语错误,但希望该示例能够解决问题)。是否可以在不指定每个列表元素名称的情况下将结果列表中的每一列提取为数据框列?
示例数据:
tmp <- tibble(col1 = c("A1", "A2") ,
col2 = c("B1", "B2"),
col3 = list(
list(x = TRUE, b = list(data.frame(y1=c(1,2,3), y2=c(4,5,6)))),
list(x = FALSE, b = list(data.frame(y1=c(1,2,3), y2=c(4,5,6))))))
所需的输出(但不必键入每一列 - 实际上我还有很多):
tmp %>% mutate(x = map(tmp$col3, "x")[[1]],
b = map(tmp$col3, "b")[[1]])
编辑:我已经意识到我上面的“手动解决方案”是错误的.. 我不确定如何手动提取 b,但对于 x,它应该是:
tmp %>% mutate(x = map_lgl(col3, "x"))
【问题讨论】:
-
Base R 咒语如果有人感兴趣,也可以这样做 -
tmp <- cbind(tmp, do.call(Map, c(rbind,tmp$col3))) -
获得正确结果的替代方法的知识总是很有趣(至少对我来说)!谢谢 - 我认为我以前没有使用过 Map 或 do.call ......还有其他东西可以处理(除了 purrr 的工作原理)