2014-12-06 86 views
0

我有一個列表,像這樣:[R編程 - 列表轉換

head(myList) 
[[1]] 
[1] "a" "b" 

[[2]] 
[1] "c" "d" 

[[3]] 
[1] "e" "f" 

我期望的輸出是一個數據框:

col1 col2 
a  b 
c  d 
e  f 

我怎樣才能做到這一點?提前致謝。

+1

'do.call(rbind,MYLIST)'或'as.data.frame(do.call(rbind,MYLIST))'如果你想有一個數據幀,而不是一個矩陣的 – 2014-12-06 20:17:37

+0

謝謝大衛!正是我需要的。 – dorkboy 2014-12-06 20:26:53

+0

@nicola - 對不起,沒有仔細閱讀這個問題... – jlhoward 2014-12-06 20:38:50

回答

1

這應該做的伎倆:

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))))) 

它修復了格式和醜陋。

+0

@RichardScriven是的,我已經更新了答案。 – 2014-12-06 20:59:19

1

典型的方法是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 
+0

'setNames(data.frame(stri_list2matrix(a,byrow = TRUE)),c(「col1」,「col2」))'可能比調用'dimnames <-'更直接 – thelatemail 2014-12-08 23:31:34