[R] Matrix to data frame conversion

arun smartpink111 at yahoo.com
Mon Nov 12 19:35:13 CET 2012


HI,

I also have no trouble in reading the example data you gave, which BTW do not have any duplicate rownames.   I guess there must be some rows in the original dataset that must be repeated.  For example:
comb_model<-read.table(text="
                               Estimate Std.Error tvalue    Pr(>|t|)
(Intercept)                      3.593793  0.012537 286.656 0.000000000
as.factor(dow)1                  0.027378  0.007348  3.726 0.000196109
as.factor(dow)2                  0.034211  0.007348  4.656 0.000003288
as.factor(dow)3                  0.013481  0.007393  1.823 0.068281371
as.factor(dow)4                  0.020708  0.007358  2.814 0.004903774
as.factor(dow)5                  0.030164  0.007327  4.117 0.000038886
as.factor(dow)6                  0.021723  0.007327  2.965 0.003039448
as.factor(dow)6                  0.021723  0.007327  2.965 0.003039448
as.factor(fluepi)                0.044272  0.014697  3.012 0.002601912
o3max                            0.003441  0.001723  1.998 0.045785798
o3max                            0.004881  0.00281    1.885 0.00540889 
",sep="",header=TRUE,row.names=NULL)

#here there are two types of  repeats, rownames only repeated (o3max) and whole rows repeated (as.factor(dow)6)
#If I wanted to delete the repeated rows.

comb_model2<-unique(comb_model[duplicated(comb_model)|duplicated(comb_model,fromLast=TRUE),])

comb_model3<-rbind(comb_model[!(duplicated(comb_model)|duplicated(comb_model,fromLast=TRUE)),],comb_model2)

 mat2<-as.matrix(comb_model3[,2:5]) #matrix can have repeated rownames
 row.names(mat2)<-comb_model3[,1]


#changing repeated rownames to unique rownames

mat3<-mat2[duplicated(rownames(mat2))|duplicated(rownames(mat2),fromLast=TRUE),]
rownames(mat3)<-paste(rownames(mat3),letters[1:nrow(mat3)],sep="")
 mat4<-mat2[!(duplicated(rownames(mat2))|duplicated(rownames(mat2),fromLast=TRUE)),]
library(plyr)
comb_model4<-join(as.data.frame(mat4),as.data.frame(mat3),type="full")

 rownames(comb_model4)<-c(rownames(mat4),rownames(mat3))
#instead of join(), you could use ?merge()
#comb_model4<-merge(as.data.frame(mat4),as.data.frame(mat3),all=TRUE,sort=FALSE)
#rownames(comb_model4)<-c(rownames(mat4),rownames(mat3))colnames(comb_model4)[4]<-"Pr(>|t|)"

comb_model4
#                  Estimate Std.Error  tvalue    Pr(>|t|)
#(Intercept)       3.593793  0.012537 286.656 0.000000000
#as.factor(dow)1   0.027378  0.007348   3.726 0.000196109
#as.factor(dow)2   0.034211  0.007348   4.656 0.000003288
#as.factor(dow)3   0.013481  0.007393   1.823 0.068281371
#as.factor(dow)4   0.020708  0.007358   2.814 0.004903774
#as.factor(dow)5   0.030164  0.007327   4.117 0.000038886
#as.factor(fluepi) 0.044272  0.014697   3.012 0.002601912
#as.factor(dow)6   0.021723  0.007327   2.965 0.003039448
#o3maxa            0.003441  0.001723   1.998 0.045785798
#o3maxb            0.004881  0.002810   1.885 0.005408890


#Another way will be to use ?rbind() comb_model4<-rbind(as.data.frame(mat4),as.data.frame(mat3)) # no need

colnames(comb_model4)[4]<-"Pr(>|t|)"
A.K.






----- Original Message -----
From: PavloEs <nicippe at gmail.com>
To: r-help at r-project.org
Cc: 
Sent: Monday, November 12, 2012 10:45 AM
Subject: [R] Matrix to data frame conversion

I have a matrix which I wanted to convert to a data frame. As I could not
succeed and resorted to export to csv and reimport it again. Why did I fail
in the attempt and how can I achieve what I wanted without  this
roundabouts?

The original matrix: 

> str(comb_model0)
num [1:90, 1:4] 3.5938 0.0274 0.0342 0.0135 0.0207 ...
- attr(*, "dimnames")=List of 2
  ..$ : chr [1:90] "(Intercept)" "as.factor(dow)1" "as.factor(dow)2"
"as.factor(dow)3" ...
  ..$ : chr [1:4] "Estimate" "Std. Error" "t value" "Pr(>|t|)"
> dim(comb_model0)
[1] 90  4
> class(comb_model0)
[1] "matrix"
> 
> 
> head(comb_model0,10)
                                  Estimate Std. Error t value    Pr(>|t|)
(Intercept)                       3.593793   0.012537 286.656 0.000000000
as.factor(dow)1                   0.027378   0.007348   3.726 0.000196109
as.factor(dow)2                   0.034211   0.007348   4.656 0.000003288
as.factor(dow)3                   0.013481   0.007393   1.823 0.068281371
as.factor(dow)4                   0.020708   0.007358   2.814 0.004903774
as.factor(dow)5                   0.030164   0.007327   4.117 0.000038886
as.factor(dow)6                   0.021723   0.007327   2.965 0.003039448
as.factor(fluepi)      0.044272   0.014697   3.012 0.002601912
o3max                             0.003441   0.001723   1.998 0.045785798

One of the many conversion attempts:

> xx<-as.data.frame(comb_model0)
> xx
Error in data.frame(Estimate = c(" 3.59379258", " 0.02737812", "
0.03421067",  : 
  duplicate row.names: (Intercept), as.factor(dow)1, as.factor(dow)2,
as.factor(dow)3, as.factor(dow)4, as.factor(dow)5, as.factor(dow)6,
as.factor(fluepi)


write.csv(comb_model0, "test.csv")

test<-read.csv("test.csv")
class(test)
[1] "data.frame"

> dim(test)
[1] 90  5

head(test,9)
                                   X    Estimate Std..Error   t.value  
Pr...t..
1                        (Intercept)  3.59379258   0.012537 286.65611
0.000000000
2                    as.factor(dow)1  0.02737812   0.007348   3.72596
0.000196109
3                    as.factor(dow)2  0.03421067   0.007348   4.65575
0.000003288
4                    as.factor(dow)3  0.01348142   0.007393   1.82343
0.068281371
5                    as.factor(dow)4  0.02070761   0.007358   2.81419
0.004903774
6                    as.factor(dow)5  0.03016411   0.007327   4.11665
0.000038886
7                    as.factor(dow)6  0.02172334   0.007327   2.96476
0.003039448
8        as.factor(fluepi)  0.04427231   0.014697   3.01232 0.002601912
9                           o3max     0.00344111   0.001723   1.99772
0.045785798



--
View this message in context: http://r.789695.n4.nabble.com/Matrix-to-data-frame-conversion-tp4649311.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.





More information about the R-help mailing list