[R] converting character matrix to a dataframe

John M. Miyamoto jmiyamot at u.washington.edu
Fri Feb 24 02:16:37 CET 2006


Dear R-Help,
    Suppose I have a character matrix, e.g.,

(ch.mat <- matrix(c('a','s','*','f','w','*','k','*','*','f','i','o'), 
ncol=3))

When I convert 'ch.mat' to a dataframe, the columns are converted to 
factors:

(d1 <- data.frame(ch.mat))
mode(d1[,1])
is.factor(d1[,1])

To prevent this, I can use 'I' to protect the column vectors:

(d2 <- data.frame(x1 = I(ch.mat[,1]), x2 = I(ch.mat[,2]), x3 = 
I(ch.mat[,3])))
mode(d2[,1])
is.factor(d2[,2])

but this method is cumbersome if the matrix has many columns.
The following code is reasonably efficient even if the matrix has 
arbitrarily many columns.

(d3 <- data.frame(apply(ch.mat,2,function(x) data.frame(I(x)))))
mode(d3[,1])
is.factor(d3[,1])

Question:  Is there a more efficient method than the last one for 
converting a character matrix to a dataframe while preventing the 
automatic conversion of the column vectors to factors?

John

--------------------------------------------------------------------
John Miyamoto, Dept. of Psychology, Box 351525
University of Washington, Seattle, WA 98195-1525
Phone 206-543-0805, Fax 206-685-3157
Homepage http://faculty.washington.edu/jmiyamot/




More information about the R-help mailing list