繁体   English   中英

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

[英]R - loop iteratively through lists and create a dataframe

我有一个长长的列表列表(> 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"

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

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

或使用tidyverse函数

purrr::map_chr(l3, "id")

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

使用基数R:

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

如果您只需要ID的

s$values[,1]
[1] "002e2b45555652749339ab9c34359fb6" "002e2b433226527493jsab9c34353fb6"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM