[R] extract rows based on column value in a data frame

Bert Gunter bgunter.4567 at gmail.com
Wed Dec 2 23:12:46 CET 2015


...
Perhaps also worth mentioning -- David's solution works even if there
are less than 3 rows per group, whereas mine will fail.

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 2:10 PM, Bert Gunter <bgunter.4567 at gmail.com> wrote:
> ... 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.



More information about the R-help mailing list