[R] how to create a vector with different categories in a simple way?

Marc Schwartz MSchwartz at mn.rr.com
Sun Oct 22 18:31:30 CEST 2006


On Sun, 2006-10-22 at 17:38 +0200, Jenny persson wrote:
> Hi R-users,
>    
>   I have a matrice called layout which contains 5 columns:id, name,
> row, column and block. The column called "block" has totally 48 blocks
> and looks like
>    
>    
>   1  2   3  4
>   5  6  7  8
>   9 10 11 12
>   13 14 15 16
>   17 18 19 20
>   21 22 23 24
>   25 26 27 28 
>   29 30 31 32
>   33 34 35 36
>   37 38 39 40
>   41 42 43 44 
>   45 46 47 48
>    
>   Each block (1-48) has 18 rows and 18 columns. I want to create 2
> variables called blockrow and blockcol in such a way that blockrow
> will have value 1 for block 1,2 3 and 4, blockrow=2 for blocks 5,6,7
> and 8 and so on. Similarly, blockcol = 1 for blocks
> 1,5 ,9,13,17,21,25,29,33,37,41 and 44 and so on. As you can see there
> are 12 blockrows and 4 blockcols. I have written the following
> programme but it didnot give the desirable output. How can I make it
> work in a simplier way ?

<snip of code>

I may be totally misunderstanding what you want, but is the following
close?

> mat
      [,1] [,2] [,3] [,4]
 [1,]    1    2    3    4
 [2,]    5    6    7    8
 [3,]    9   10   11   12
 [4,]   13   14   15   16
 [5,]   17   18   19   20
 [6,]   21   22   23   24
 [7,]   25   26   27   28
 [8,]   29   30   31   32
 [9,]   33   34   35   36
[10,]   37   38   39   40
[11,]   41   42   43   44
[12,]   45   46   47   48


blockrow <- row(mat)
blockcol <- col(mat)

> blockrow
      [,1] [,2] [,3] [,4]
 [1,]    1    1    1    1
 [2,]    2    2    2    2
 [3,]    3    3    3    3
 [4,]    4    4    4    4
 [5,]    5    5    5    5
 [6,]    6    6    6    6
 [7,]    7    7    7    7
 [8,]    8    8    8    8
 [9,]    9    9    9    9
[10,]   10   10   10   10
[11,]   11   11   11   11
[12,]   12   12   12   12

> blockcol
      [,1] [,2] [,3] [,4]
 [1,]    1    2    3    4
 [2,]    1    2    3    4
 [3,]    1    2    3    4
 [4,]    1    2    3    4
 [5,]    1    2    3    4
 [6,]    1    2    3    4
 [7,]    1    2    3    4
 [8,]    1    2    3    4
 [9,]    1    2    3    4
[10,]    1    2    3    4
[11,]    1    2    3    4
[12,]    1    2    3    4

And you can then coerce them to vectors, if that is what you want:

> as.vector(blockcol)
 [1] 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2 2 3 3 3 3 3 3 3 3 3 3
[35] 3 3 4 4 4 4 4 4 4 4 4 4 4 4

> as.vector(blockrow)
 [1]  1  2  3  4  5  6  7  8  9 10 11 12  1  2  3  4  5  6  7  8  9 10
[23] 11 12  1  2  3  4  5  6  7  8  9 10 11 12  1  2  3  4  5  6  7  8
[45]  9 10 11 12


See ?row and ?col

HTH,

Marc Schwartz



More information about the R-help mailing list