[R] splitting a long dataframe

Swagath swagathnavin82 at gmail.com
Wed Dec 26 10:32:56 CET 2012


Dear Arun,
Thanks a lot for the time and help.

Cheers,
Swagath

On 12/26/12 6:24 AM, arun wrote:
> Hi,
> You can do this either by:
> with(data1,aggregate(y,by=list(x),function(x) x)) #2nd column is a list here
> #or
>   res1<-split(seq(nrow(data1)),data1$x)
> #or
> res1<-tapply(data1$y,list(data1$x),function(x) x)
> res2<- t(sapply(res1,`[`,1:max(sapply(res1,length))))
> res2[cbind(c(rep(8,4),rep(9,4)),c(1:4,1:4))]<-res2[cbind(c(rep(8,4),rep(9,4)),c(3,1,4,2,3,1,4,2))]
>   res2
> #        [,1] [,2] [,3] [,4]
> #0:00:00    1    8   17   24
> #0:30:00    2    9   18   25
> #1:00:00    3   10   19   26
> #1:30:00    4   11   20   27
> #2:00:00    5   12   21   28
> #2:30:00    6   13   22   29
> #3:00:00    7   14   23   30
> #3:30:00   NA   15   NA   31
> #4:00:00   NA   16   NA   32
>
> #or
> res3<-do.call(rbind,lapply(res1,function(x) {if(length(x) < 4) c(NA,x[1],NA,x[2]) else x}))
>   tail(res3)
>   #       [,1] [,2] [,3] [,4]
> #1:30:00    4   11   20   27
> #2:00:00    5   12   21   28
> #2:30:00    6   13   22   29
> #3:00:00    7   14   23   30
> #3:30:00   NA   15   NA   31
> #4:00:00   NA   16   NA   32
>
> identical(res2,res3)
> #[1] TRUE
>
> A.K.
>
>
>
>
> ----- Original Message -----
> From: Swagath <swagathnavin82 at gmail.com>
> To: r-help at r-project.org
> Cc:
> Sent: Tuesday, December 25, 2012 12:52 PM
> Subject: [R] splitting a long dataframe
>
> Dear all...Merry Christmas
>
> I would like to split a long dataframe. The dataframe looks like this
>
> x<-c('0:00:00', '0:30:00', '1:00:00', '1:30:00', '2:00:00', '2:30:00', '3:00:00', '0:00:00', '0:30:00', '1:00:00', '1:30:00', '2:00:00', '2:30:00', '3:00:00', '3:30:00', '4:00:00','0:00:00', '0:30:00', '1:00:00', '1:30:00', '2:00:00', '2:30:00', '3:00:00', '0:00:00', '0:30:00', '1:00:00', '1:30:00', '2:00:00', '2:30:00', '3:00:00' , '3:30:00', '4:00:00')
>
> y=seq(1:32)
>
> data1=data.frame(x,y)
>
> i want to split in such a way that the output looks like
>
> 0:00:00  1  8 17 24
> 0:30:00  2  9 18 25
> 1:00:00  3 10 19 26
> 1:30:00  4 11 20 27
> 2:00:00  5 12 21 28
> 2:30:00  6 13 22 29
> 3:00:00  7 14 23 30
> 3:30:00 NA 15 NA 31
> 4:00:00 NA 16 NA 32
>
> any ideas or functions that i look into for doing this?
> Thanks a lot for your help and time.
>
> Cheers,
> Swagath
>
> ______________________________________________
> R-help at 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.
>




More information about the R-help mailing list