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@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.