[R] Splitting a character variable into a numeric one and a character one?

Gabor Grothendieck ggrothendieck at gmail.com
Mon Sep 25 19:00:45 CEST 2006


And here is a third solution not using package gsubfn:

s <- c("123abc", "12cd34", "1e23")
out <- gsub("^(([[:digit:]]+)(.*))", "\\1 \\2 \\3", s)
read.table(textConnection(out), as.is = TRUE)

Again, if spaces appear in the input string choose a character
not appearing, such as comma, and do it like this:

s <- c("123abc", "12cd34", "1e23")
out <- gsub("^(([[:digit:]]+)(.*))", "\\1,\\2,\\3", s)
read.table(textConnection(out), sep = ",", as.is = TRUE)


On 9/25/06, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> Here is one more solution:
>
> library(gsubfn)
> s <- c("123abc", "12cd34", "1e23")
>
> out <- gsubfn("^([[:digit:]]+)(.*)", paste, s, backref = -2)
> read.table(textConnection(out))
>
> It assumes there are no spaces in the strings.  If
> there are then choose a sep= that does not appear
> and do this:
>
> sep = ","
> f <- function(x, y) paste(x, y, sep = sep)
> out <- gsubfn("^([[:digit:]]+)(.*)", f, s, backref = -2)
> read.table(textConnection(out), sep = sep)
>
>
> On 9/25/06, Gabor Grothendieck <ggrothendieck at gmail.com> wrote:
> > strapply in package gsubfn can do that:
> >
> >
> > library(gsubfn)
> > s <- c("123abc", "12cd34", "1e23")
> >
> > out <- strapply(s, "^([[:digit:]]+)(.*)", c)
> > out <- do.call(rbind, out) # as a matrix
> >
> > data.frame(x = out[,1], num = as.numeric(out[,2]), char = out[,3]) #
> > as a data.frame
> >
> >
> > On 9/25/06, Frank Duan <fhduan at gmail.com> wrote:
> > > Hi All,
> > >
> > > I have a data with a variable like this:
> > >
> > > Column 1
> > >
> > > "123abc"
> > > "12cd34"
> > > "1e23"
> > > ...
> > >
> > > Now I want to do an operation that can split it into two variables:
> > >
> > > Column 1        Column 2         Column 3
> > >
> > > "123abc"         123                  "abc"
> > > "12cd34"         12                    "cd34"
> > > "1e23"             1                      "e23"
> > > ...
> > >
> > > So basically, I want to split the original variabe into a numeric one and a
> > > character one, while the splitting element is the first character in Column
> > > 1.
> > >
> > > I searched the forum with key words "strsplit"and "substr", but still can't
> > > solve this problem. Can anyone give me some hints?
> > >
> > > Thanks in advance,
> > >
> > > FD
> > >
> > >        [[alternative HTML version deleted]]
> > >
> > > ______________________________________________
> > > 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.
> > >
> >
>



More information about the R-help mailing list