Re: [R] create matrix

From: jim holtman <jholtman_at_gmail.com>
Date: Thu, 20 Mar 2008 04:55:31 -0500

Since you did not provide a sample of your data, here is an example of how to take a vector and create a matrix with 5 entries for each value, with the extra ones having a zero in the second column:

> x <- sample(1:7, 20, T)
> table(x)

x
1 2 3 4 5 6 7
2 4 3 2 4 4 1
> # create a matrix with 5 rows of each value in the vector 'x' with the extra rows
> # having 0 in the second column
> x.l <- lapply(split(x, x), function(.val){

+     # pad with at least 5 extra rows to make sure matrix is filled out
+     z <- cbind(c(.val, rep(.val[1],5)), c(rep(1, length(.val)), rep(0,5)))
+     z[1:5,]   # only return the first 5
+ })

> # output the new matrix
> do.call(rbind, x.l)

      [,1] [,2]

 [1,]    1    1
 [2,]    1    1
 [3,]    1    0
 [4,]    1    0
 [5,]    1    0
 [6,]    2    1
 [7,]    2    1
 [8,]    2    1
 [9,]    2    1
[10,]    2    0
[11,]    3    1
[12,]    3    1
[13,]    3    1
[14,]    3    0
[15,]    3    0
[16,]    4    1
[17,]    4    1
[18,]    4    0
[19,]    4    0
[20,]    4    0
[21,]    5    1
[22,]    5    1
[23,]    5    1
[24,]    5    1
[25,]    5    0
[26,]    6    1
[27,]    6    1
[28,]    6    1
[29,]    6    1
[30,]    6    0
[31,]    7    1
[32,]    7    0
[33,]    7    0

[34,] 7 0
[35,] 7 0
>

On Thu, Mar 20, 2008 at 1:51 AM, Felix Zajitschek - UNSW <felix.zajitschek_at_unsw.edu.au> wrote:
> Hi all,

>

> I have a dataset consisting of 5 columns and over 5000 rows. Each row
> gives information about an individual animal, including longevity, i.e.
> at what age an animal died.
> For the model I use I need to create n rows for each animal, n being its
> longevity, and a new column 'survival' with a binary 0/1 outcome. When
> an animal died e.g. at age 5, there have to be 5 rows of identical data,
> except 4 with 0 (=alive) for 'survival', and 1 row with '1' for
> 'survival'.
>

> I thought of creating matrices for each individual, adding first one
> column 'survival' containing zeros to the original dataset, then
> creating matrices with data = 'the vector containing all elements of an
> individual/row' ([1,], nrow = [a,b], exctracting the element for
> longevity, and then with byrow = TRUE letting the data be filled in by
> row. At the end I would have to set the last element in 'survival' to
> '1', and then combine all matrices into one single one.
>

> So far I've used Excel to create these datesets manually, but with more
> than 1000 individuals this gets really tedious. I haven't used R before
> for this sort of a bit more advanced data manipulation, and I would
> really appreciate any input/primer about how people would go about doing
> this.
>

> Thanks,
> Felix
>
>

> ______________________________________________________________
> ::Felix Zajitschek
> Evolution & Ecology Research Centre
> School of Biological, Earth and Environmental Sciences
> University of New South Wales - Sydney NSW 2052 - Australia
> Tel +61 (0)2 9385 8068
> Fax +61 (0)2 9385 1558
> eMail <mailto:felix.zajitschek_at_unsw.edu.au>
> felix.zajitschek_at_unsw.edu.au
>

> <http://www.bees.unsw.edu.au/school/researchstudents/zajitschekfelix.htm
> l> www.bees.unsw.edu.au/school/researchstudents/zajitschekfelix.html
>
>

> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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 you are trying to solve?

______________________________________________
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.
Received on Thu 20 Mar 2008 - 09:58:33 GMT

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.2.0, at Thu 20 Mar 2008 - 11:30:23 GMT.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.

list of date sections of archive