[R] subset with multiple criteria

jgarcia at ija.csic.es jgarcia at ija.csic.es
Mon Jun 23 19:49:26 CEST 2008


Thanks for your answers.
I'm sorry. I'm afraid I didn't pose correctly the question , and the use
os "subset" was misleading. What I need is to obtain the index of the
corresponding rows in E.coor, to subtitute the corresponding values by new
updated values.

The closest answer to what I really need is that of Jim Holtman, but it
does not seem to work correctly as it does not check that the two
conditions (equal East, and equal North) apply simultaneously for each
individual row. e.g, let's suposse E.coor and subset.coor are exactly:

> E.coor
     east   north       dat
1  582650 4248850 0.8316848
2  582750 4248850 0.7230272
3  582850 4248850 0.3250818
4  582950 4248850 0.6144006
5  583050 4248850 0.8706312
6  583150 4248850 0.2149651
7  583250 4248850 0.1659519
8  583350 4248850 0.2145174
9  583450 4248850 0.1615151
10 582950 4248850 0.9370766
> subset.coor
    east   north newdat
1 582650 4248850    1.2
4 582950 4248850    2.5
6 583150 4248850    0.6
> E.coor[E.coor$east %in% subset.coor$east & E.coor$north %in%
subset.coor$north,]
     east   north       dat
1  582650 4248850 0.8316848
4  582950 4248850 0.6144006
6  583150 4248850 0.2149651
10 582950 4248850 0.9370766

while I didn't intent to get the row 10

So, I can not use this syntax to substitute E.coor[c(1,4,6),"dat"] by the
new corresponding values subset.coor[,"newdat"].

I'm Sorry for my previously badly posed problem.

Any suggestion about this?

Javier
---------










> You can also do this:
>
>> E[(E$east %in% sub$east) & (E$north %in% sub$north),]
>     east   north       dat
> 1 582650 4248850 0.8316848
> 7 583250 4248850 0.1659519
>>
>
>
> On Mon, Jun 23, 2008 at 12:32 PM,  <jgarcia at ija.csic.es> wrote:
>> This should be theoretically very simple, but I dont get the elegant
>> answer (without looping).
>>
>> I've got a long (thousands of rows) data frame:
>>
>>> E.coor[1:10,]
>>     east   north       dat
>> 1  582650 4248850 0.8316848
>> 2  582750 4248850 0.7230272
>> 3  582850 4248850 0.3250818
>> 4  582950 4248850 0.6144006
>> 5  583050 4248850 0.8706312
>> 6  583150 4248850 0.2149651
>> 7  583250 4248850 0.1659519
>> 8  583350 4248850 0.2145174
>> 9  583450 4248850 0.1615151
>> 10 583550 4248850 0.9370766
>>
>> and need to extract those with the coordinates coinciding with those in
>> a
>> smaller data frame (about one hundred rows):
>>
>>> subset.coor
>>     east   north
>> 20 584550 4248850
>> 21 584650 4248850
>> 22 584750 4248850
>> 23 584850 4248850
>> 24 584950 4248850
>> 25 585050 4248850
>>
>> i.e, I need the ~ one hundred E.coor rows that appear in subset.coor
>>
>> Could you help with this.
>>
>>
>> Best regards,
>> Javier
>> ---------
>>
>> ______________________________________________
>> 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.
>>
>
>
>
> --
> Jim Holtman
> Cincinnati, OH
> +1 513 646 9390
>
> What is the problem you are trying to solve?
>



More information about the R-help mailing list