1
我有一個列表列表,其中每個子列表代表一行。我想將其轉換爲數據框,保留所有列的類型。這感覺應該是相當直接的,但我一直在遇到問題。將列表轉換爲數據框,其中每個列表代表一行,保留類型
我的第二個解決方案是最好的方法嗎?
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)
你可以只轉換整數回日期在一個呼叫。像'res < - do.call(rbind.data.frame,list_of_lists); res $ date < - as.Date(res $ date,origin =「1970-01-01」)' –
謝謝 - 好主意。你知道爲什麼它不保存日期類型嗎? – RobinL
它在'?rbind.data.frame'下有記錄:「*輸入可能有的任何類都被丟棄...... *」因此Date類的數據類型的底層存儲模式(檢出'storage.mode(as.Date (Sys.Date()))'),所以當類被剝離時,它成爲一個數字(可以轉換回當然的日期)。 –