将列表列表转换为dataframe,其中每个列表代表一行,保留类型

时间:2017-02-19 10:38:10

标签: r dataframe

我有一个列表列表,其中每个子列表代表一行。我想将其转换为数据框,保留所有列的类型。这感觉应该很简单,但我一直遇到问题。

我的第二种解决方案是最好的方法吗?

l1 <- list(id="a", date=as.Date("2017-01-01"), value=10)
l2 <- list(id="b", date=as.Date("2017-01-02"), value=12)
list_of_lists <- list(l1,l2)

# Does not work - dates are converted to integers
do.call(rbind.data.frame, list_of_lists)

# Does work, but have to explicitly pass stringsAsFactors, 
# and seems inefficient
list_of_dfs <- lapply(list_of_lists, data.frame, stringsAsFactors=FALSE)
do.call(rbind, list_of_dfs)

2 个答案:

答案 0 :(得分:3)

我们可以使用rbindlist

library(data.table)
rbindlist(list_of_lists)
#   id       date value
#1:  a 2017-01-01    10
#2:  b 2017-01-02    12

答案 1 :(得分:2)

也许整洁,

library(dplyr)
bind_rows(list_of_lists)
# A tibble: 2 × 3
#     id       date     value
#    <chr>     <date>   <dbl>
#1     a    2017-01-01    10
#2     b    2017-01-02    12