Ragia Ibrahim
2015-Dec-02 18:09 UTC
[R] extract rows based on column value in a data frame
Dear Group, I have a data frame that such as v1 v2 v3 v4 1 1 3 6 1 1 5 6 1 1 8 0 1 2 6 1 1 2 4 0 1 3 4 4 1 3 5 4 1 3 6 3 1 3 7 1 2 4 3 7 2 5 5 4 2 5 8 2 2 1 6 1 2 1 4 0 2 1 4 3 2 1 5 2 3 1 6 1 3 6 7 0 3 6 3 6 3 6 5 6 3 6 8 0 3 6 6 1 3 2 4 0 3 2 4 4 3 2 5 4 3 2 6 3 3 2 7 1 3 5 9 5 3 6 9 5 the result required is each first 3 rows, from distinct v2 column for each v1 column v1 v2 v3 v4 1 1 3 6 1 2 6 1 1 3 4 4 2 4 3 7 2 5 5 4 2 1 6 1 3 6 3 6 3 2 4 0 3 5 9 5 thanks in advance [[alternative HTML version deleted]]
David Winsemius
2015-Dec-02 20:26 UTC
[R] extract rows based on column value in a data frame
> On Dec 2, 2015, at 10:09 AM, Ragia Ibrahim <ragia11 at hotmail.com> wrote: > > Dear Group, > I have a data frame that such as > > v1 v2 v3 v4 > 1 1 3 6 > 1 1 5 6 > 1 1 8 0 > 1 2 6 1 > 1 2 4 0 > 1 3 4 4 > 1 3 5 4 > 1 3 6 3 > 1 3 7 1 > > 2 4 3 7 > 2 5 5 4 > 2 5 8 2 > 2 1 6 1 > 2 1 4 0 > 2 1 4 3 > 2 1 5 2 > 3 1 6 1 > 3 6 7 0 > > 3 6 3 6 > 3 6 5 6 > 3 6 8 0 > 3 6 6 1 > 3 2 4 0 > 3 2 4 4 > 3 2 5 4 > 3 2 6 3 > 3 2 7 1 > 3 5 9 5 > 3 6 9 5 > > > the result required is each first 3 rows, from distinct v2 column for each v1 column > > > v1 v2 v3 v4 > 1 1 3 6 > 1 2 6 1 > 1 3 4 4 > 2 4 3 7 > 2 5 5 4 > 2 1 6 1 > 3 6 3 6 > 3 2 4 0 > 3 5 9 5Probably something along the lines of dfrm[ ave(dfrm$v1, dfrm$v1, FUN=seq_along) %in% 1:3 , ]> > > thanks in advance > [[alternative HTML version deleted]]Future postings should be in plain text. ? David Winsemius Alameda, CA, USA
... or perhaps using rep() to do the indexing directly instead of matching: dfrm[ ave(dfrm$v1, dfrm$v1, FUN function(x)rep(c(TRUE,FALSE),c(3,length(x)-3))), ] There's probably another 6 dozen ways to do it, especially if you access packages like data.table, plyr, etc. Cheers, Bert Bert Gunter "Data is not information. Information is not knowledge. And knowledge is certainly not wisdom." -- Clifford Stoll On Wed, Dec 2, 2015 at 12:26 PM, David Winsemius <dwinsemius at comcast.net> wrote:> >> On Dec 2, 2015, at 10:09 AM, Ragia Ibrahim <ragia11 at hotmail.com> wrote: >> >> Dear Group, >> I have a data frame that such as >> >> v1 v2 v3 v4 >> 1 1 3 6 >> 1 1 5 6 >> 1 1 8 0 >> 1 2 6 1 >> 1 2 4 0 >> 1 3 4 4 >> 1 3 5 4 >> 1 3 6 3 >> 1 3 7 1 >> >> 2 4 3 7 >> 2 5 5 4 >> 2 5 8 2 >> 2 1 6 1 >> 2 1 4 0 >> 2 1 4 3 >> 2 1 5 2 >> 3 1 6 1 >> 3 6 7 0 >> >> 3 6 3 6 >> 3 6 5 6 >> 3 6 8 0 >> 3 6 6 1 >> 3 2 4 0 >> 3 2 4 4 >> 3 2 5 4 >> 3 2 6 3 >> 3 2 7 1 >> 3 5 9 5 >> 3 6 9 5 >> >> >> the result required is each first 3 rows, from distinct v2 column for each v1 column >> >> >> v1 v2 v3 v4 >> 1 1 3 6 >> 1 2 6 1 >> 1 3 4 4 >> 2 4 3 7 >> 2 5 5 4 >> 2 1 6 1 >> 3 6 3 6 >> 3 2 4 0 >> 3 5 9 5 > > > Probably something along the lines of > > dfrm[ ave(dfrm$v1, dfrm$v1, FUN=seq_along) %in% 1:3 , ] > > >> >> >> thanks in advance >> [[alternative HTML version deleted]] > > Future postings should be in plain text. > > ? > > David Winsemius > Alameda, CA, USA > > ______________________________________________ > R-help at r-project.org mailing list -- To UNSUBSCRIBE and more, see > 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.