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

将列表列表转换为dataframe,其中每个列表表示一行,保留类型,r,dataframe,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 - dat

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

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

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)
l1也许是整洁的东西

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
库(dplyr)
绑定行(列表的列表)
#一个tibble:2×3
#id日期值
#            
#1A 2017-01-01 10
#2b 2017-01-02 12
也许是些整洁的东西

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
库(dplyr)
绑定行(列表的列表)
#一个tibble:2×3
#id日期值
#            
#1A 2017-01-01 10
#2b 2017-01-02 12

我们可以使用
rbindlist

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

我们可以使用
rbindlist

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

您可以在一次调用中将整数转换回日期。类似于
res谢谢-好主意。你知道为什么它一开始不保留日期类型吗?它被记录在
?rbind.data.frame
:“输入的任何类都可能被丢弃…”中,因此日期类的基本存储模式是数值的(签出
存储模式(as.date(Sys.date())
),因此当该类被剥离时,它就变成了一个数字(当然可以转换回日期)。您只需在一次调用中将整数转换回日期。类似于
res的功能,谢谢-好主意。您知道为什么它首先不保留日期类型吗?它记录在
?rbind.data.frame
下:“输入的任何类都将被丢弃…”因此,日期类的基本存储模式是numeric(签出
storage.mode(as.Date(Sys.Date())
),因此当该类被剥离时,它会变成一个数字(当然可以转换回日期)。