2017-02-26 185 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