[R] Creating a dataframe from a vector of character strings

Brian Diggs diggsb at ohsu.edu
Fri Apr 15 00:55:58 CEST 2011


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



More information about the R-help mailing list