簡體   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