[英]Binding a list of lists , with empty elements into one tibble / R
我有一個很大的嵌套列表,其中包含其他列表,其中包含 tibbles。 清理元素后,我留下了很多空的 tibbles 和列表。
現在我想將我的結果放入一個 Dataframe 中,但我收到錯誤消息:
Argument x must have names.
我知道空元素搞砸了我綁定行的嘗試,但我找不到刪除所有空 tibbles 的方法。
這是我的數據結構:
a<-tibble (1:7,
letters[7:1])
b<-tibble (1:7)
c<-tibble(.rows=2)
riddle<-list(list(a,b,c), list(list(a,b,c)), list(c),c)
bind_rows(riddle)
請注意,這只是一個最小化版本。 因此,任何手動編輯或刪除元素都不適用於我的原始數據。
任何帶有 purrr 的解決方案都會非常有用::)
提前感謝您的幫助!
如果我們想要獲取單個數據集,請使用map
遍歷list
,然后使用bind_rows
library(purrr)
library(dplyr)
map_dfr(riddle, bind_rows)
如果打算刪除具有 0 行或 0 列的數據集,請使用遞歸函數檢查是否all
dim
屬性的值都大於 0
library(rrapply)
riddle2 <- rrapply(riddle, condition = function(x) all(dim(x)>0),
classes = "data.frame", how= "prune")
-比較結構
#riddle2
> str(riddle2)
List of 2
$ :List of 2
..$ : tibble [7 × 2] (S3: tbl_df/tbl/data.frame)
.. ..$ 1:7 : int [1:7] 1 2 3 4 5 6 7
.. ..$ letters[7:1]: chr [1:7] "g" "f" "e" "d" ...
..$ : tibble [7 × 1] (S3: tbl_df/tbl/data.frame)
.. ..$ 1:7: int [1:7] 1 2 3 4 5 6 7
$ :List of 1
..$ :List of 2
.. ..$ : tibble [7 × 2] (S3: tbl_df/tbl/data.frame)
.. .. ..$ 1:7 : int [1:7] 1 2 3 4 5 6 7
.. .. ..$ letters[7:1]: chr [1:7] "g" "f" "e" "d" ...
.. ..$ : tibble [7 × 1] (S3: tbl_df/tbl/data.frame)
.. .. ..$ 1:7: int [1:7] 1 2 3 4 5 6 7
#riddle
> str(riddle)
List of 4
$ :List of 3
..$ : tibble [7 × 2] (S3: tbl_df/tbl/data.frame)
.. ..$ 1:7 : int [1:7] 1 2 3 4 5 6 7
.. ..$ letters[7:1]: chr [1:7] "g" "f" "e" "d" ...
..$ : tibble [7 × 1] (S3: tbl_df/tbl/data.frame)
.. ..$ 1:7: int [1:7] 1 2 3 4 5 6 7
..$ : tibble [2 × 0] (S3: tbl_df/tbl/data.frame)
Named list()
$ :List of 1
..$ :List of 3
.. ..$ : tibble [7 × 2] (S3: tbl_df/tbl/data.frame)
.. .. ..$ 1:7 : int [1:7] 1 2 3 4 5 6 7
.. .. ..$ letters[7:1]: chr [1:7] "g" "f" "e" "d" ...
.. ..$ : tibble [7 × 1] (S3: tbl_df/tbl/data.frame)
.. .. ..$ 1:7: int [1:7] 1 2 3 4 5 6 7
.. ..$ : tibble [2 × 0] (S3: tbl_df/tbl/data.frame)
Named list()
$ :List of 1
..$ : tibble [2 × 0] (S3: tbl_df/tbl/data.frame)
Named list()
$ : tibble [2 × 0] (S3: tbl_df/tbl/data.frame)
Named list()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.