我有一个列表列表,其中每个子列表代表一行。我想将其转换为数据框,保留所有列的类型。这感觉应该很简单,但我一直遇到问题。
我的第二种解决方案是最好的方法吗?
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)
答案 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