Thanks for the suggestion.
However, I've tried sapply and data.matrix.
The problem is that it while it returns a numeric matrix, it gives back:
1 1 1
2 2 2
3 3 3
instead of
1 2 3
4 5 6
7 8 9
The latter matrix is the desired result
Thanks,
Andrew
On 5/16/07, Marc Schwartz <[EMAIL PROTECTED]> wrote:
>
> On Wed, 2007-05-16 at 08:40 -0400, Andrew Yee wrote:
> > Thanks for the suggestion and the explanation for why I was running
> > into these troubles.
> >
> > I've tried:
> >
> > as.numeric(as.matrix(sample.data[-1, -1]))
> >
> > However, this creates another vector rather than a matrix.
>
> Right. That's because I'm an idiot and need more caffeine... :-)
>
> > Is there a straight forward way to convert this directly into a
> > numeric matrix rather than a vector?
>
> Yeah, Dimitris' approach below of using data.matrix().
>
> You could also use:
>
> mat <- sapply(sample.data[-1, -1], as.numeric)
> rownames(mat) <- rownames(sample.data[-1, -1])
>
> > mat
> x y z
> 2 1 1 1
> 3 2 2 2
> 4 3 3 3
>
> Though, this is essentially what data.matrix() does internally.
>
> > Additionally, I've also considered:
> >
> > data.matrix(sample.data[-1,-1]
> >
> > but bizarrely, it returns:
> >
> > x y z
> > 2 1 1 1
> > 3 2 2 2
> > 4 3 3 3
>
> That is a numeric matrix:
>
> > str(data.matrix(sample.data[-1, -1]))
> int [1:3, 1:3] 1 2 3 1 2 3 1 2 3
> - attr(*, "dimnames")=List of 2
> ..$ : chr [1:3] "2" "3" "4"
> ..$ : chr [1:3] "x" "y" "z"
>
> HTH,
>
> Marc
>
> >
> > Thanks,
> > Andrew
> >
> >
> > On 5/16/07, Marc Schwartz <[EMAIL PROTECTED]> wrote:
> > On Wed, 2007-05-16 at 08:10 -0400, Andrew Yee wrote:
> > > I have the following csv file:
> > >
> > > name,x,y,z
> > > category,delta,gamma,epsilon
> > > a,1,2,3
> > > b,4,5,6
> > > c,7,8,9
> > >
> > > I'd like to create a numeric matrix of just the numbers in
> > this csv dataset.
> > >
> > > I've tried the following program:
> > >
> > > sample.data <- read.csv("sample.csv")
> > > numerical.data <- as.matrix(sample.data[-1,-1])
> > >
> > > However, print(numerical.data ) returns what appears to be a
> > matrix of
> > > characters:
> > >
> > > x y z
> > > 2 "1" "2" "3"
> > > 3 "4" "5" "6"
> > > 4 "7" "8" "9"
> > >
> > > How do I force it to be numbers rather than characters?
> > >
> > > Thanks,
> > > Andrew
> >
> > The problem is that you have two rows which contain alpha
> > entries.
> >
> > The first row is treated as the header, but the second row is
> > treated as
> > actual data, thus overriding the numeric values in the
> > subsequent rows.
> >
> > You could use:
> >
> > as.numeric(as.matrix(sample.data[-1, -1]))
> >
> > to coerce the matrix to numeric, or if you don't need the
> > alpha entries,
> > you could modify the read.csv() call to something like:
> >
> > read.csv("sample.csv", header = FALSE, skip = 2, row.names =
> > 1,
> > col.names = c("name", "x", "y", "z")
> >
> > This will skip the first two rows, set the first column to the
> > row names
> > and give you a data frame with numeric columns, which in most
> > cases can
> > be treated as a numeric matrix and/or you could explicitly
> > coerce it to
> > one.
> >
> > HTH,
> >
> > Marc Schwartz
> >
> >
> >
>
>
[[alternative HTML version deleted]]
______________________________________________
[email protected] 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.