[R] Convert char vector to numeric table

Sundar Dorai-Raj sundar.dorai-raj at pdf.com
Tue Apr 1 01:12:15 CEST 2003



Nurnberg-LaZerte wrote:
> I'm a great fan of read.table(), but this time the data had a lot of cruft. So I used readLines() and editted the char vector to eventually get something like this:
> "     23.4   1.5   4.2"
> "     19.1   2.2   4.1"
> and so on. To get that into a 3 col numeric table, I first just used:
> 
> writeLines(data,"tempfile")
> read.table("tempfile",col.names=c("A","B","C"))
> 
> Works fine, but writing to a temporary file seems ... inelegant?  And read.table() doesn't take a char vector as a file or connection argument. The following works but it seems like a lot of code: 
> 
> data <- sub(" +","",data)   		# remove leading blanks for strsplit
> data <- strsplit(data," +")   		# strsplit returns a list of char vectors
> ndata <- character(0)			# vectorize the list of char vectors
> for (ii in 1:length(data)) ndata <- c(ndata,data[[ii]])  
> ndata <- as.numeric(ndata)				
> dim(ndata) <- c(3,length(data))	  	
> data <- t(ndata)
> data.frame(A=data[,1],B=data[,2],C=data[,3])
> 


Bruce,
   I don't know if this is any more elegant, but...

data <- c("     23.4   1.5   4.2","     19.1   2.2   4.1")
data.new <- as.data.frame(t(sapply(strsplit(gsub("[ \t]*"," ",data)," 
"),as.numeric))[,-1])
names(data.new) <- LETTERS[1:3]


Sundar



More information about the R-help mailing list