我有一個列表,像這樣:[R編程 - 列表轉換
head(myList)
[[1]]
[1] "a" "b"
[[2]]
[1] "c" "d"
[[3]]
[1] "e" "f"
我期望的輸出是一個數據框:
col1 col2
a b
c d
e f
我怎樣才能做到這一點?提前致謝。
我有一個列表,像這樣:[R編程 - 列表轉換
head(myList)
[[1]]
[1] "a" "b"
[[2]]
[1] "c" "d"
[[3]]
[1] "e" "f"
我期望的輸出是一個數據框:
col1 col2
a b
c d
e f
我怎樣才能做到這一點?提前致謝。
這應該做的伎倆:
a<-list(c("a", "b"), c("c", "d"), c("e", "f"))
t(data.frame(a))
Cheerio。
UPDATE:
data.frame(t(data.frame(a, row.names=c("col1", "col2"))), row.names=1:length(a))
# col1 col2
# 1 a b
# 2 c d
# 3 e f
更新2:
下面是另一個版本。
data.frame(t(matrix(unlist(a), 2, 3, dimnames=list(c("col1", "col2"), 1:length(a)))))
它修復了格式和醜陋。
@RichardScriven是的,我已經更新了答案。 – 2014-12-06 20:59:19
典型的方法是do.call(rbind, a)
,正如@DavidArenburg所述。但是,與許多R一樣,還有其他選擇。
這裏有兩個:
在基礎R,您可以使用simplify2array
(但它被稱爲是慢)。
t(simplify2array(a))
您還可以使用sti_list2matrix
,它用於類似的目的,但simplify2array
快很多,而且不需要調換:
library(stringi)
stri_list2matrix(a, byrow = TRUE)
# [,1] [,2]
# [1,] "a" "b"
# [2,] "c" "d"
# [3,] "e" "f"
相結合,與一些dimnames<-
掛羊頭賣狗肉,你可以得到你想要的data.frame
很容易。
as.data.frame(`dimnames<-`(stri_list2matrix(a, byrow = TRUE),
list(NULL, c("col1", "col2"))))
# col1 col2
# 1 a b
# 2 c d
# 3 e f
'setNames(data.frame(stri_list2matrix(a,byrow = TRUE)),c(「col1」,「col2」))'可能比調用'dimnames <-'更直接 – thelatemail 2014-12-08 23:31:34
'do.call(rbind,MYLIST)'或'as.data.frame(do.call(rbind,MYLIST))'如果你想有一個數據幀,而不是一個矩陣的 – 2014-12-06 20:17:37
謝謝大衛!正是我需要的。 – dorkboy 2014-12-06 20:26:53
@nicola - 對不起,沒有仔細閱讀這個問題... – jlhoward 2014-12-06 20:38:50