[R] divide column in a dataframe based on a character

Brian Diggs diggsb at ohsu.edu
Tue Oct 26 22:39:31 CEST 2010


On 10/25/2010 8:56 PM, Daisy Englert Duursma wrote:
> Hello,
>
> If I have a dataframe:
>
> example(data.frame)
> zz<-c("aa_bb","bb_cc","cc_dd","dd_ee","ee_ff","ff_gg","gg_hh","ii_jj","jj_kk","kk_ll")
> ddd<- cbind(dd, group = zz)
>
> and I want to divide the column named group by the "_", how would I do this?
>
> so instead of the first row being
>   x   y  fac char  group
>   1  1   C    a     aa_bb
>
> it should be:
>   x  y fac  char group_a    group_b
>   1  1   C    a      aa             bb
>
>
>
> I know for a vector I can:
> x1<- c("a_b","b_c","c_d")
> do.call("rbind",strsplit(x1, "_"))
>
> but I am not sure how this relates to my data.frame
>
> Thanks,
> Daisy

Daisy,

You've already gotten a couple of responses, but I thought I'd point out 
an different approach (the let-someone-else-deal-with-the-details 
approach).  The reshape package has a colsplit function which is 
designed just for this sort of thing.

library("reshape")

ddd <- cbind(ddd, colsplit(ddd$group, split="_", names=c("group_a", 
"group_b")))

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



More information about the R-help mailing list