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 <- as.data.frame(mapply(function (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 
Australia 
T: +61 7 3365 2506 
email: S.Blomberg1_at_uq.edu.au

Policies:
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: r-help-bounces@r-project.org on behalf of Felix Zajitschek - UNSW
Sent: Thu 20/03/2008 4:51 PM
To: r-help@r-project.org
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.
 
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@unsw.edu.au>
felix.zajitschek@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@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.


	[[alternative HTML version deleted]]

