[R] splitting dataframe, assign to new dataframe, add new rows to new dataframe
cls59
chuck at sharpsteen.net
Tue Oct 13 04:02:01 CEST 2009
wk yeo wrote:
>
>
> Hi, all,
>
> My objective is to split a dataframe named "cmbine" according to the value
> of "classes". After the split, I will take the first instance from each
> class and bin them into a new dataframe, "df1". In the 2nd iteration, I
> will take the 2nd available instance and bin them into another new
> dataframe, "df2".
>
>
My apologies, I did not read the first lines of your question carefully. Say
we split the data frame by class using by():
byClass <- by( cmbine, cmbine[['classes']], function( df ){ return(df) } )
We could then determine the maximum number of rows in all the returned data
frames:
maxRows <- max(sapply( byClass, nrow ))
Then, I usually resort to a gratuitous application of lapply() and
do.call():
# Loop over each value between 1 and the maximum number of rows, return
results as a list.
lapply( 1:maxRow, function(i){
# Loop over each data frame, extract the ith rows and rbind the
results
# together.
ithRows <- do.call(rbind,lapply(byClass,function(df){
return( df[i,] )
}))
# Remove all NA rows
ithRows <- ithRows[ !is.na(ithRows[,1]), ]
return(ithRows)
})
[[1]]
names mass classes
1 apple 5e-01 1
2 tiger 1e+02 2
3 pencil 1e-02 3
[[2]]
names mass classes
1 banana 0.15 1
2 chicken 1.00 2
[[3]]
names mass classes
1 pear 0.3 1
There's definitely a more elegant way to do this, perhaps using some
routines in the plyr package.
Good luck!
-Charlie
-----
Charlie Sharpsteen
Undergraduate
Environmental Resources Engineering
Humboldt State University
--
View this message in context: http://www.nabble.com/splitting-dataframe%2C-assign-to-new-dataframe%2C-add-new-rows-to-new-dataframe-tp25865409p25866082.html
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list