[R] subset with multiple criteria
Gabor Grothendieck
ggrothendieck at gmail.com
Mon Jun 23 20:35:22 CEST 2008
Just add a column to E.corr that is 1, 2, ...
E.coor$id <- 1:nrow(E.coor)
and now repeat the merge and SQL solutions.
On Mon, Jun 23, 2008 at 1:49 PM, <jgarcia at ija.csic.es> wrote:
> 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?
>>
>
> ______________________________________________
> 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