Re: [R] create matrix

From: Simon Blomberg <>
Date: Thu, 20 Mar 2008 22:04:33 +1000

There may be a less baroque way of doing it, but does this do what you want?

Say you have a data.frame called dat:

> dat

          x1 x2 Longevity
1 -1.9582519  a         4
2  0.8724081  b         2
3 -0.9150847  c         5

# now create a new long data.frame:

> dat.long <- (x) rep(x, dat$Longevity), dat[,1:2]))

# Add in the survival column:

> dat.long$Survival <- unlist(sapply(dat$Longevity, function (x) c(rep(0, x-1),1)))
> dat.long

                  x1 x2 Survival
1  -1.95825191986208  a        0
2  -1.95825191986208  a        0
3  -1.95825191986208  a        0
4  -1.95825191986208  a        1
5  0.872408144284977  b        0
6  0.872408144284977  b        1
7  -0.91508470125413  c        0
8  -0.91508470125413  c        0
9  -0.91508470125413  c        0
10 -0.91508470125413  c        0
11 -0.91508470125413  c        1

HTH, Simon.  

Simon Blomberg, BSc (Hons), PhD, MAppStat. Lecturer and Consultant Statistician
Faculty of Biological and Chemical Sciences The University of Queensland
St. Lucia Queensland 4072
T: +61 7 3365 2506

1. I will NOT analyse your data for you. 2. Your deadline is your problem.

The combination of some data and an aching desire for an answer does not ensure that a reasonable answer can be extracted from a given body of data. - John Tukey.

-----Original Message-----
From: on behalf of Felix Zajitschek - UNSW Sent: Thu 20/03/2008 4:51 PM
Subject: [R] create matrix  

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.  


::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       <>

< l>

        [[alternative HTML version deleted]] mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code.

        [[alternative HTML version deleted]] mailing list PLEASE do read the posting guide and provide commented, minimal, self-contained, reproducible code. Received on Thu 20 Mar 2008 - 12:08:23 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 - 12:30:23 GMT.

Mailing list information is available at Please read the posting guide before posting to the list.

list of date sections of archive