[R] subsetting data-frame by vector of characters

james perkins jperkins at biochem.ucl.ac.uk
Fri Jun 13 16:43:43 CEST 2008


Thanks a lot for that. Its the %in% I needed to work out mainly

large didn't mean anything in particular, just that it gets quite long 
with the real data.
I did mean: names = c("John", "Phil", "Robert")

The only problem is that using the method you suggest is that I lose the 
indexing, ie in the example, instead of:

(index)    Name    Fave.Number
1    John    7
2    Phil    14
3    Robert    23


I end up with


(index) Name Fave.Number
1     John     7
3     Phil     14
5     Robert 23

This isnt a problem at the moment but I guess it could be if I used the 
table later in loops. Is there an easy way to re-index the table?

Kind regards

Jim

Wacek Kusnierczyk wrote:
> james perkins wrote:
>   
>> Hi,
>>
>> I have a very simple problem but I can't think how to solve it without
>> using a for loop and creating a large logical vector. However given
>> the nature of the problem I am sure there is a "1-liner" that could do
>> the same thing much more efficiently.
>>
>> bascially I have a dataframe with characters in, eg
>>
>>     
>>> names.and.numbers
>>>       
>> (index)    Name    Fave.Number
>> 1    John    7
>> 2    Tony    12
>> 3    Phil    14
>> 4    Adam    22
>> 5    Robert    23
>>
>>
>> Now, imagine I have a vector of names, ie:
>>
>>     
>>> names = c("John,Phil,Robert")
>>>       
>
> this is a one-element vector of string(s) that are concatenated names
> (strings with names).
> or you mean:  names = c("John", "Phil", "Robert")
>
>
>   
>> All I want to do is get the subset of the dataframe which corresponds
>> to the names in the vector "Names". IE
>>
>> (index)    Name    Fave.Number
>> 1    John    7
>> 2    Phil    14
>> 3    Robert    23
>>     
>
> this should do:
> names.and.numbers[names.and.numbers$Name %in% names,]
>
> if names is as you say above, do
> names.and.numbers[names.and.numbers$Name %in% strsplit(names,","), ]
>
> you do create a logical vector here (what does 'large' mean?), but no
> loop is involved at the surface.
>
> vQ
>
> ______________________________________________
> R-help at r-project.org mailing list
> 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