converting character matrix to a dataframe
On Fri, 24 Feb 2006, Prof Brian Ripley wrote:
It is a bit more efficient to use as.data.frame in your apply. You could make a copy of as.data.frame.matrix (under another name) and remove the special-casing of character matrices. This would efficiently give you a data frame with character columns, but they would then not be treated 'AsIs' in subsequent manipulations. So this is only desirable if efficiency is really important (and it seems unlikely to me that it is). On Thu, 23 Feb 2006, John M. Miyamoto wrote:
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:
[SNIP]
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?
So I take it that this last solution would be:
(ch.mat <- matrix(c('a','s','*','f','w','*','k','*','*','f','i','o'),
ncol=3))
(d4 <- data.frame(apply(ch.mat, 2, function(x) as.data.frame(I(x)))))
mode(d4[,1])
is.factor(d4[,1])
You're right that I'm not really concerned with computational efficiency,
but only minimizing the amount of code that I have to write and remember.
The solution seems to be that I should write a function that accomplishes
this task, which I have done. Thank you.
John