From felix at nfrac.org  Tue Dec 15 23:35:50 2009
From: felix at nfrac.org (Felix Andrews)
Date: Wed, 16 Dec 2009 09:35:50 +1100
Subject: [Rd] split.data.frame
In-Reply-To: <4B27518E.6030209@dbmail.com>
References: <4B27518E.6030209@dbmail.com>
Message-ID: <94730b8a0912151435l1961c630y8ac5ad12f6dfba93@mail.gmail.com>

I agree, I would definitely appreciate that.

A simpler implementation:

split.data.frame <- function(x, f, drop = FALSE, ...)
{
    ff <- eval(substitute(f), x, parent.frame())
    lapply(split(seq_len(nrow(x)), ff, drop = drop, ...),
function(ind) x[ind, , drop = FALSE])
}


df <- data.frame(x = 1:10, y = rep(1:2, each = 5))
split( df, df$y )
split( df, y )
split( df, x > 3 )


2009/12/15 Romain Francois <romain.francois at dbmail.com>:
> Hello,
>
> I very much enjoy "with" and "subset" semantics for data frames and was
> wondering if we could have something similar with split, basically by
> evaluating the second argument "with" the data frame :
>
> split.data.frame
> function(x, f, drop = FALSE, ...){
> ? ? ? ?call <- match.call( )
> ? ? ? ?fcall <- call( "with", data = call[["x"]], expr = call[["f"]] )
> ? ? ? ?ff <- eval( fcall, parent.frame(1) )
>
> ? ? ? ?lapply(split(seq_len(nrow(x)), ff, drop = drop, ...), function(ind)
> x[ind, , drop = FALSE])
> }
>
>
>> split( df, y )
> $`1`
> ?x y
> 1 1 1
> 2 2 1
> 3 3 1
> 4 4 1
> 5 5 1
>
> $`2`
> ? ?x y
> 6 ? 6 2
> 7 ? 7 2
> 8 ? 8 2
> 9 ? 9 2
> 10 10 2
>
>> split( df, x > 3 )
> $`FALSE`
> ?x y
> 1 1 1
> 2 2 1
> 3 3 1
>
> $`TRUE`
> ? ?x y
> 4 ? 4 1
> 5 ? 5 1
> 6 ? 6 2
> 7 ? 7 2
> 8 ? 8 2
> 9 ? 9 2
> 10 10 2
>
>
> Romain
>
> --
> Romain Francois
> Professional R Enthusiast
> +33(0) 6 28 91 30 30
> http://romainfrancois.blog.free.fr
> |- http://tr.im/HlX9 : new package : bibtex
> |- http://tr.im/Gq7i : ohloh
> `- http://tr.im/FtUu : new package : highlight
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel
>



-- 
Felix Andrews / ???
Postdoctoral Fellow
Integrated Catchment Assessment and Management (iCAM) Centre
Fenner School of Environment and Society [Bldg 48a]
The Australian National University
Canberra ACT 0200 Australia
M: +61 410 400 963
T: + 61 2 6125 4670
E: felix.andrews at anu.edu.au
CRICOS Provider No. 00120C
-- 
http://www.neurofractal.org/felix/



[Rd] split.data.frame
Felix Andrews