Skip to content

Converting characters to numbers in data frames

4 messages · Anon., Sundar Dorai-Raj, Peter Wolf +1 more

#
I'm sure I'm missing something obvious here, but I can't find the 
solution (including in the FAQ etc.).

I have a vector of names of variables like this: NRes.x.y. where x and y 
are numbers.  I want to extract these numbers as numbers to use 
elsewhere.  I can extract the numbers as a list of characters using 
strsplit(), and convert that to a data frame, e.g.:

NAMES=c("NRes.1.2.", "NRes.1.3.", "NRes.1.4.", "NRes.1.5.", "NRes.1.6.")
NUMBERS=strsplit(gsub("NRes.","", NAMES, perl =T), '.', fixed = TRUE)
NUMBERS.df=t(data.frame(NUMBERS))

But I now want to convert the characters to be numeric.  Using 
as.numeric(NUMBERS.df) converts them, but to a vector.  How can I 
convert and keep as a data frame?  I could use this:

matrix(as.numeric(NUMBERS.df), ncol=dim(NUMBERS.df)[2])

but I seem to be jumping through far too many hoops: there must be an 
easier way.  An suggestions?

Bob
#
Anon. wrote:
How about this?

NUMBERS <- lapply(strsplit(NAMES, "\\."), "[", -1)
as.data.frame(do.call("rbind", lapply(NUMBERS, as.numeric)))

--sundar
#
Try:

NAMES=c("NRes.1.2.", "NRes.1.3.", "NRes.1.4.", "NRes.1.5.", "NRes.1.6.")
pattern<-"NRes\.([0-9]*)\.([0-9]*)\."
data.frame(x=sub(pattern,"\\1",NAMES),y=sub(pattern,"\\2",NAMES))

@
output-start
Thu Aug 25 14:08:50 2005
  x y
1 1 2
2 1 3
3 1 4
4 1 5
5 1 6
output-end

Peter Wolf
Anon. wrote:
#
On 8/25/05, Anon. <bob.ohara at helsinki.fi> wrote:
Try this:

   read.table(textConnection(NAMES), sep = ".")[,2:3]

You may also want to add the col.names= argument to the read.table call
if you want prettier column names.  Also I think Names and Numbers would
be sufficient to distinguish them from potential lower case counterparts.