[R] Breaking up a Row in R (transpose)

Petr Savicky savicky at cs.cas.cz
Fri May 4 10:28:25 CEST 2012


On Thu, May 03, 2012 at 07:36:45PM -0700, marc212 wrote:
> I have the following:
> Time   A1   A1   B1   B1   C1   C2
>               x     y     x      y       x     y
>  0         5     6      6      7      7      9
>   1         3     4      4      3      9      9  
>   2         5     2      6      4     7       4
> 
> I want to change it to the following:
>         0           1             2
>         x    y     x    y     x    y 
> A1  5    6     3   4      5    2
> B1  6    7     4   3      6   4
> etc for a much larger set

Hi.

Try the following.

  # the example input
  Orig <- rbind(
  "0"=c(5, 6, 6, 7, 7, 9),
  "1"=c(3, 4, 4, 3, 9, 9),
  "2"=c(5, 2, 6, 4, 7, 4))
  colnames(Orig) <- rep(c("x", "y"), times=3)

  # transformation
  Arr <- array(Orig, dim=c(nrow(Orig), 2, ncol(Orig)/2))
  Arr

  , , 1    # this is the required row 1 in the output
  
       [,1] [,2]
  [1,]    5    6
  [2,]    3    4
  [3,]    5    2
  
  , , 2    # this is the required row 2 in the output
  
       [,1] [,2]
  [1,]    6    7
  [2,]    4    3
  [3,]    6    4
  
  , , 3
  
       [,1] [,2]
  [1,]    7    9
  [2,]    9    9
  [3,]    7    4

  Arr1 <- aperm(Arr, perm=c(2, 1, 3))
  d <- dim(Arr1)
  t(array(Arr1, dim=c(d[1]*d[2], d[3])))

       [,1] [,2] [,3] [,4] [,5] [,6]
  [1,]    5    6    3    4    5    2
  [2,]    6    7    4    3    6    4
  [3,]    7    9    9    9    7    4

Hope this helps.

Petr Savicky.



More information about the R-help mailing list