Wolfram Fischer
2003-Jan-23 10:24 UTC
[R] conversion of a list of matrices into a dataframe
DATA I have data from two (or more) locations with ID: 'A' and 'B' for three (or more) YEARS: 1999 to 2001 of two (or more) variables: VAR1, VAR2. > x ID YEAR VAR1 VAR2 1 A 1999 9 2 2 B 1999 8 9 3 A 2000 2 3 4 B 2000 3 4 5 A 2001 9 5 6 B 2001 7 2 DESIRED RESULT I want to calculate the rank of the values of each variable for each location (ID) in every year. I want to get the ranks in a dataframe 'x.ranked' having the same structure as the original dataframe 'x' (which should be ready for the use by lattice functions). > x.ranked ID YEAR VAR1 VAR2 1 A 1999 2 1 2 B 1999 1 2 3 A 2000 1 1 4 B 2000 2 2 5 A 2001 2 2 6 B 2001 1 1 EXAMPLE CODE x <- data.frame( ID = rep( c('A', 'B' ), 3 ) , YEAR = rep( c( 1999, 2000, 2001 ), each=2 ) , VAR1 = c( 9, 8, 2, 3, 9, 7 ) , VAR2 = c( 2, 9, 3, 4, 5, 2 ) ) vars <- c( 'VAR1', 'VAR2' ) fun <- function( x, group=NULL ){ if( ! is.null(group) ) by( x, group, fun ) else if( ! is.vector(x) ) sapply( x, fun ) else rank( x ) } x.ranked <- fun( x[,vars], x$YEAR ) OBTAINED RESULT I got the right values by using the function 'fun', but the result does not have the desired structure. Can anyone help me to get the desired structure? > x.ranked group: 1999 VAR1 VAR2 [1,] 2 1 [2,] 1 2 -------------- group: 2000 VAR1 VAR2 [1,] 1 1 [2,] 2 2 -------------- group: 2001 VAR1 VAR2 [1,] 2 2 [2,] 1 1 Wolfram