On 4/14/2011 2:04 PM, Cliff Clive wrote:
I have a vector of character strings that I would like to split in two, and
place in columns of a dataframe.

So for example, I start with this:

beatles<- c("John Lennon", "Paul McCartney", "George Harrison", "Ringo
Starr")

and I want to end up with a data frame that looks like this:

Beatles = data.frame(firstName=c("John", "Paul", "George", "Ringo"),
                        lastName=c("Lennon", "McCartney", "Harrison",
"Starr"))
Beatles
   firstName  lastName
1      John    Lennon
2      Paul McCartney
3    George  Harrison
4     Ringo     Starr


I tried string-splitting the first vector on the spaces between first and
last names, and it returned a list:

strsplit(beatles, " ")
[[1]]
[1] "John"   "Lennon"

[[2]]
[1] "Paul"      "McCartney"

[[3]]
[1] "George"   "Harrison"

[[4]]
[1] "Ringo" "Starr"


Is there a fast way to convert this list into a data frame?  Right now all I
can think of is using a for loop, which I would like to avoid, since the
real application I am working on involves a much larger dataset.

Another approach, in addition to the ones you have already been given, is to use the colsplit function in the reshape package. This is the sort of thing it is designed to do.

library("reshape")
colsplit(beatles, " ", names=c("firstName", "lastName"))

Similar caveats apply, though, in that it assumes only 2 names that are separated by one space (and will give a warning if that is not the case).

--
Brian S. Diggs, PhD
Senior Research Associate, Department of Surgery
Oregon Health & Science University

______________________________________________
R-help@r-project.org 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.

Reply via email to