From: Marc Schwartz <marc_schwartz_at_comcast.net>

Date: Wed, 16 May 2007 07:58:51 -0500

R-help_at_stat.math.ethz.ch 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. Received on Wed 16 May 2007 - 13:03:16 GMT

Date: Wed, 16 May 2007 07:58:51 -0500

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 <marc_schwartz_at_comcast.net> 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
**>
**>
*

>

R-help_at_stat.math.ethz.ch 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. Received on Wed 16 May 2007 - 13:03:16 GMT

Archive maintained by Robert King, hosted by
the discipline of
statistics at the
University of Newcastle,
Australia.

Archive generated by hypermail 2.2.0, at Wed 16 May 2007 - 13:31:07 GMT.

*
Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help.
Please read the posting
guide before posting to the list.
*