[R] Matrix Manipulation

jim holtman jholtman at gmail.com
Thu Nov 4 17:07:21 CET 2010


try this:

> x
     V2 V3 V4
[1,]  1  1  1
[2,]  2  2  2
[3,]  3  3  3
[4,]  4  4  4
[5,]  5 NA  5
[6,] NA NA  6
[7,] NA NA NA
> offset <- c(0,2,1)
> # add the control to the data and make two copies so we can offset
> x.new <- rbind(offset, x, x)
> result <- apply(x.new, 2, function(.col){
+     .col[seq(nrow(x) - .col[1L] + 2L, length = nrow(x))]
+ })
> result
 V2 V3 V4
  1 NA NA
  2 NA  1
  3  1  2
  4  2  3
  5  3  4
 NA  4  5
 NA NA  6


On Thu, Nov 4, 2010 at 11:47 AM, emj83 <stp08emj at shef.ac.uk> wrote:
>
> Hi,
>
> Is there a quick way to go from this matrix:
>> A
>     [,1] [,2] [,3]
> [1,]    1    1    1
> [2,]    2    2    2
> [3,]    3    3    3
> [4,]    4    4    4
> [5,]    5   NA    5
> [6,]   NA   NA    6
> [7,]   NA   NA   NA
>
> to this matrix:
>> B
>     [,1] [,2] [,3]
> [1,]    1   NA   NA
> [2,]    2   NA    1
> [3,]    3    1    2
> [4,]    4    2    3
> [5,]    5    3    4
> [6,]   NA    4    5
> [7,]   NA   NA    6
>
> without using a loop?
> For example using a vector which describes how many NA's are required from
> the "top" of the matrix- so in this case it would be c(0,2,1).
>
> Many thanks Emma
>
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Matrix-Manipulation-tp3027266p3027266.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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.
>



-- 
Jim Holtman
Cincinnati, OH
+1 513 646 9390

What is the problem that you are trying to solve?



More information about the R-help mailing list