[英]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.