![](/img/trans.png)
[英]How to convert lists nested in a tibble into a single tibble with each list item on a new row?
[英]Convert list with nested lists to one-row tibble with nested dataframe
我正在嘗試將通過 API 檢索並由 jsonlite 轉換為列表的對象轉換為單行小標題(即,列表中的每個項目都成為小標題中的變量)。
復雜的是,除了一組單獨的值之外,嵌套在對象中的最后一項是一個對象數組,jsonlite 將其轉換為兩個列表的列表,每個列表包含兩個項目(我使用了simpleDataFrame = FALSE)。
下面的 reprex 中使用了類似於實際 API 數據的簡化結構。
library(tidyverse)
dat <- list(
id = 1,
name = "Jo Bloggs",
offices = list(
list(office_id = 999, title = "Vice President"),
list(office_id = 998, title = "Director of Operations")
)
)
df <- dat %>% as_tibble()
df
#> # A tibble: 2 x 3
#> id name offices
#> <dbl> <chr> <list>
#> 1 1.00 Jo Bloggs <list [2]>
#> 2 1.00 Jo Bloggs <list [2]>
由reprex 包(v0.2.0) 於2018年 2 月 26 日創建。
使用 as_tibble() 進行轉換會生成一個兩行數據框,復制所有非嵌套值,兩個嵌套列表分別位於單獨的行上。
我應該改變什么,而不是這樣,我最終得到一行數據,最后一列包含一個嵌套的 2 x 2 數據幀/tibble? 提前致謝。
您可以使用mutate
來更改 office 列。
res1 <- df %>% mutate(offices = list(bind_rows(map(offices,as.tibble))))
> res1
# A tibble: 2 x 3
id name offices
<dbl> <chr> <list>
1 1 Jo Bloggs <tibble [2 x 2]>
2 1 Jo Bloggs <tibble [2 x 2]>
以下是變異過程:
bind_rows
所有單獨的bind_rows
您會發現兩個 2x2 小標題是相同的。 所以我們只需要刪除重復的行(這里我只是將 id 列作為唯一鍵)。
res <- res1[!duplicated(res1[1]),]
> res
# A tibble: 1 x 3
id name offices
<dbl> <chr> <list>
1 1 Jo Bloggs <tibble [2 x 2]>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.