2017-02-26 225 views
2

我有了這個結構tbl有以下形式:轉換矩陣data.frame

> tbl 

    a_1 a_2 a_3 
[1,] "L" "14" "L" 
[2,] "L" "62" "D" 
[3,] "H" "0" "L" 

這是一個矩陣,實際上是:

> class(tbl) 
[1] "matrix" 

但是當我試圖改變這爲data.frame,則DF的所有條目只顯示數據類型,例如:

>as.data.frame(tbl, nrow = length(tbl[,1]), ncol = 3, byrow = TRUE) 

a_1   a_2   a_3 
<list>  <list>  <list> 
<chr[1]> <chr[1]> <chr[1]> 
<chr[1]> <chr[1]> <chr[1]> 
<chr[1]> <chr[1]> <chr[1]> 

我已經嘗試了多種選擇,但他們都不工作,包括:

data.frame(rows=rownames(tbl)[row(tbl)],vars=colnames(tbl)[col(tbl)], values=c(tbl))

但是我收到一個錯誤,當我嘗試使用它。我想造成data.frame採取以下形式:

a_1   a_2   a_3 
<char>  <chr>  <char> 
"L"   "14"  "L" 
"L"   "62"  "D" 
"H"   "0"   "L" 

我想找類似的Q的,但無法找到任何人誰有同樣的問題。任何建議將是一個很大的幫助!


dput(tbl) 

structure(list("L", "L", "H", "14", "62", "0", "L", "D", "L"), .Dim = c(3L, 3L), .Dimnames = list(NULL, c("a_1", "a_2", "a_3"))) 


str(tbl) 

List of 9 
$ : chr "L" 
$ : chr "L" 
$ : chr "H" 
$ : chr "14" 
$ : chr "62" 
$ : chr "0" 
$ : chr "L" 
$ : chr "D" 
$ : chr "L" 
- attr(*, "dim")= int [1:2] 3 3 
- attr(*, "dimnames")=List of 2 
    ..$ : NULL 
    ..$ : chr [1:3] "a_1" "a_2" "a_3" 
+2

能否請您使用'dput'提供數據,以便我們可以看到什麼樣的數據你有結構嗎? – G5W

+0

這是原始版本的一個較小版本 - 我對現在已修復的列「a2」的數據類型發生了錯誤。現在有意義嗎? – jmb277

+0

好吧,我把它分解了一下,結果如下:'structure(list(「L」,「L」,「H」,「14」,「62」,「0」,「L」,「D 「,」L「),.Dim = c(3L, 3L),.Dimnames = list(NULL,c(」a_1「,」a_2「,」a_3「)))' – jmb277

回答

3

嘗試使用下面的襯板:

as.data.frame(apply(tbl, 2, unlist)) 

或本:

tbl2 <- unlist(tbl) 
attributes(tbl2) <- attributes(tbl) 
DF <- as.data.frame(tbl2) 
+0

_yes!_ - 我一直在旋轉我的輪子太久了!兩個選項都運行良好。我需要研究'apply'和'attributes' - 這些對我來說都是新的。非常感謝!!! – jmb277