R-遍历列表循环并创建一个数据框

时间:2018-07-02 14:18:45

标签: r list loops for-loop iteration

我的列表很长(> 100k),并且需要迭代遍历每个列表并提取“ id”-我可以通过在for循环中构造lapply来轻松做到这一点。

以下是列表的示例:

l1 <- list(id="002e2b45555652749339ab9c34359fb6", key="2", value="xx")
l2 <- list(id="002e2b433226527493jsab9c34353fb6", key="4", value="zz")
l3 <- list(list1, list2)

我做循环:

for(i in 1:20) {
  lapply(l3$id[[i]][1], function (x) print(x))
}

基本上打印id的每个列表的所有元素-很好。 我最终想用行中的所有“ id”构造一个矩阵/数据框。令我感到烦恼的是,循环中的打印效果很好,可以打印出所有列表中的所有ID-尽管我无法将行绑定到数据框或矩阵等。我正在尝试类似的操作-并没有做我想要的事情(尽管未收到错误等)

for(i in 1:20) {
  lapply(l3$id[[i]][1], function (x) rbind(x))
}

因此,所需的输出应该是(最好是一个数据帧)。

[1] "002e2b45555652749339ab9c3400cc52"
[1] "002e2b45555652749339ab9c34040525"

2 个答案:

答案 0 :(得分:2)

如果您想要ID的向量,则可以

sapply(l3, "[[", "id")

或使用tidyverse函数

purrr::map_chr(l3, "id")

R中不需要像这样的东西循环。

答案 1 :(得分:1)

使用基数R:

binary()

如果您只需要ID的

s=aggregate(.~ind,stack(setNames(l3,1:length(l3))),identity)
  ind                         values.1 values.2 values.3
1   1 002e2b45555652749339ab9c34359fb6        2       xx
2   2 002e2b433226527493jsab9c34353fb6        4       zz