Hello R help,
 I have a question similar to what is posted by someone before. my
problem is that Instead of last assessment, I want to choose last two.
I have a data set with several time assessments for each participant.
I want to select the last assessment for each participant. My dataset
looks like this:
ID  week  outcome
1   2   14
1   4   28
1   6   42
4   2   14
4   6   46
4   9   64
4   9   71
4  12   85
9   2   14
9   4   28
9   6   51
9   9   66
9  12   84
Here is one solution for choosing last assessment
do.call("rbind",
        by(df, INDICES=df$ID, FUN=function(DF) DF[which.max(DF$week), ]))
  ID week outcome
1  1    6      42
4  4   12      85
9  9   12      84
On 2012-10-11 12:48, bibek sharma wrote:> Hello R help, > I have a question similar to what is posted by someone before. my > problem is that Instead of last assessment, I want to choose last two. > > I have a data set with several time assessments for each participant. > I want to select the last assessment for each participant. My dataset > looks like this: > ID week outcome > 1 2 14 > 1 4 28 > 1 6 42 > 4 2 14 > 4 6 46 > 4 9 64 > 4 9 71 > 4 12 85 > 9 2 14 > 9 4 28 > 9 6 51 > 9 9 66 > 9 12 84 > > Here is one solution for choosing last assessment > do.call("rbind", > by(df, INDICES=df$ID, FUN=function(DF) DF[which.max(DF$week), ])) > ID week outcome > 1 1 6 42 > 4 4 12 85 > 9 9 12 84With the plyr package: library(plyr) ddply(df, .(ID), function(x) tail(x, 2)) or, slightly simpler: ddply(df, .(ID), tail, 2) Peter Ehlers
On Oct 11, 2012, at 12:48 PM, bibek sharma wrote:> Hello R help, > I have a question similar to what is posted by someone before. my > problem is that Instead of last assessment, I want to choose last two. > > I have a data set with several time assessments for each participant. > I want to select the last assessment for each participant. My dataset > looks like this: > ID week outcome > 1 2 14 > 1 4 28 > 1 6 42 > 4 2 14 > 4 6 46 > 4 9 64 > 4 9 71 > 4 12 85 > 9 2 14 > 9 4 28 > 9 6 51 > 9 9 66 > 9 12 84 > > Here is one solution for choosing last assessment > do.call("rbind", > by(df, INDICES=df$ID, FUN=function(DF) DF[which.max(DF$week), ]))Why wouldn't the solution be something along the lines of: do.call("rbind", by(df, INDICES=df$ID, FUN=function(DF) tail(DF, 2) ))> ID week outcome > 1 1 6 42 > 4 4 12 85 > 9 9 12 84 > >David Winsemius, MD Alameda, CA, USA