很多時候我想轉換一個列表,其中每個索引具有與數據框相同的元素類型。例如,我可能有一個列表:什麼是最有效的方式將列表投入數據框?
> my.list
[[1]]
[[1]]$global_stdev_ppb
[1] 24267673
[[1]]$range
[1] 0.03114799
[[1]]$tok
[1] "hello"
[[1]]$global_freq_ppb
[1] 211592.6
[[2]]
[[2]]$global_stdev_ppb
[1] 11561448
[[2]]$range
[1] 0.08870838
[[2]]$tok
[1] "world"
[[2]]$global_freq_ppb
[1] 1002043
我想將此列表轉換爲數據框,其中每個索引元素是一列。自然(我)的事情去是爲使用do.call
:足夠
> my.matrix<-do.call("rbind", my.list)
> my.matrix
global_stdev_ppb range tok global_freq_ppb
[1,] 24267673 0.03114799 "hello" 211592.6
[2,] 11561448 0.08870838 "world" 1002043
簡單,但是當我試圖施放此矩陣作爲一個數據幀,列保持列表元素,而不是載體:
> my.df<-as.data.frame(my.matrix, stringsAsFactors=FALSE)
> my.df[,1]
[[1]]
[1] 24267673
[[2]]
[1] 11561448
目前,得到數據幀投妥善我使用unlist
和as.vector
遍歷每個列,然後重鑄數據幀,例如:
new.list<-lapply(1:ncol(my.matrix), function(x) as.vector(unlist(my.matrix[,x])))
my.df<-as.data.frame(do.call(cbind, new.list), stringsAsFactors=FALSE)
但是,這看起來效率很低。有沒有更好的方法來做到這一點?
看`?data.table :: rbindlist` – marbel 2016-12-22 17:13:20
2017年,你應該使用`your_list%>%減少(bind_rows)``從purrr` – Zafar 2017-03-06 21:32:29