1

我有一个这样的列表:

lst <-
list(structure(c("1", "[19]"), .Dim = 1:2), structure("1", .Dim = c(1L, 
1L)), structure(c("1", "[41]"), .Dim = 1:2), structure(c("1", 
"[55]"), .Dim = 1:2), structure(c("1", "[56]"), .Dim = 1:2), 
    structure(c("1", "[84]"), .Dim = 1:2))

如何将其转换为tibble

rslt <-
tibble(batch=c(1,1,1,1,1,1), id=c("[19]","","[41]","[55]","[56]","[84]"))

# A tibble: 6 x 2
  batch    id
  <dbl> <chr>
1     1  [19]
2     1      
3     1  [41]
4     1  [55]
5     1  [56]
6     1  [84]
4

2 回答 2

3

我们遍历lst并将其转换data.framematrix. 通常,do.call(rbind, lst)如果尺寸相同,使用应该可以工作。但是,这里就不一样了。使用map_dfrfrom purrr,我们遍历每个lst元素,应用函数as.data.frame将其转换为data.frame,同时,我们得到一个正在使用的数据集map_dfr

map_dfr() 和 map_dfc() 分别返回由行绑定和列绑定创建的数据帧。他们需要安装 dplyr。

library(purrr)
map_dfr(lst, ~as.data.frame(., stringsAsFactors=FALSE))

注意:它为不存在的元素返回 NA,它比具有空白元素更好

于 2017-11-10T10:30:51.660 回答
3

包里还有一个很方便的函数plyr,可以轻松搞定,

plyr::rbind.fill(lapply(lst, as.data.frame))

#  V1   V2
#1  1 [19]
#2  1 <NA>
#3  1 [41]
#4  1 [55]
#5  1 [56]
#6  1 [84]
于 2017-11-10T10:49:44.560 回答