[R-sig-eco] altitudinal overlap

Karla Shikev karlashikev at gmail.com
Wed Jul 15 16:31:54 CEST 2015


Worked like a charm.Thanks!

On Tue, Jul 14, 2015 at 9:31 PM, Sargeant, Glen <gsargeant at usgs.gov> wrote:

> Oops!  Tally the entire matrix, not just the upper triangular portion.
> Adding the code in red (4th line from top) should rectify the error.
>
> for(i in 1:(nrow(x)-1)){
>     for(j in (i+1):nrow(x)){
>       mat[i,j] <- x$min[j] <= x$max[i]
>       *mat[j,i] <- mat[i,j]*
>     }
> }
>
>
>
>
>
>
> On Tue, Jul 14, 2015 at 7:02 PM, Sargeant, Glen <gsargeant at usgs.gov>
> wrote:
>
>> Here you go.
>>
>> > #Data.  Each row gives altitudinal limits for a species
>> >
>> > x <- matrix(runif(20),10,2)
>>
>> > x <- t(apply(x,1,sort))
>>
>> > dimnames(x) <- list(NULL, c("min","max"))
>>
>> > species <- paste("species",1:10,sep="")
>>
>> > x <- data.frame(species,x)
>>
>> > x
>>      species        min       max
>> 1   species1 0.20903724 0.8232747
>> 2   species2 0.25137925 0.7794901
>> 3   species3 0.09128804 0.2311824
>> 4   species4 0.07792821 0.8668317
>> 5   species5 0.34627541 0.5385044
>> 6   species6 0.14072631 0.3356345
>> 7   species7 0.52154781 0.9216631
>> 8   species8 0.03126684 0.3382409
>> 9   species9 0.43925482 0.4398011
>> 10 species10 0.41146614 0.4611622
>>
>> > #Order by min and then by max within min
>> > x <- x[order(x$min,x$max),]
>>
>> > x
>>      species        min       max
>> 8   species8 0.03126684 0.3382409
>> 4   species4 0.07792821 0.8668317
>> 3   species3 0.09128804 0.2311824
>> 6   species6 0.14072631 0.3356345
>> 1   species1 0.20903724 0.8232747
>> 2   species2 0.25137925 0.7794901
>> 5   species5 0.34627541 0.5385044
>> 10 species10 0.41146614 0.4611622
>> 9   species9 0.43925482 0.4398011
>> 7   species7 0.52154781 0.9216631
>>
>> > #Compare each minimum to preceding maxima.
>>
>> > #This is where the reordering comes in.
>> > #The only way two species can overlap is if
>> > #the minimum for the second one is less than
>> > #or equal to the maximum for the first one.
>> > mat <- matrix(NA,nrow(x),nrow(x))
>>
>> > dimnames(mat) <- list(x$species,x$species)
>>
>> > for(i in 1:(nrow(x)-1)){
>> +   for(j in (i+1):nrow(x)){
>> +     mat[i,j] <- x$min[j] <= x$max[i]
>> +   }
>> + }
>>
>> > mat
>>           species8 species4 species3 species6 species1 species2 species5
>> species10 species9 species7
>> species8        NA     TRUE     TRUE     TRUE     TRUE     TRUE
>> FALSE     FALSE    FALSE    FALSE
>> species4        NA       NA     TRUE     TRUE     TRUE     TRUE
>> TRUE      TRUE     TRUE     TRUE
>> species3        NA       NA       NA     TRUE     TRUE    FALSE
>> FALSE     FALSE    FALSE    FALSE
>> species6        NA       NA       NA       NA     TRUE     TRUE
>> FALSE     FALSE    FALSE    FALSE
>> species1        NA       NA       NA       NA       NA     TRUE
>> TRUE      TRUE     TRUE     TRUE
>> species2        NA       NA       NA       NA       NA       NA
>> TRUE      TRUE     TRUE     TRUE
>> species5        NA       NA       NA       NA       NA       NA
>> NA      TRUE     TRUE     TRUE
>> species10       NA       NA       NA       NA       NA       NA
>> NA        NA     TRUE    FALSE
>> species9        NA       NA       NA       NA       NA       NA
>> NA        NA       NA    FALSE
>> species7        NA       NA       NA       NA       NA       NA
>> NA        NA       NA       NA
>>
>> > apply(mat,1,sum,na.rm=TRUE)
>>  species8  species4  species3  species6  species1  species2  species5
>> species10  species9  species7
>>         5         8         2         2         5         4
>> 3         1         0         0
>>
>> On Tue, Jul 14, 2015 at 6:37 PM, Karla Shikev <karlashikev at gmail.com>
>> wrote:
>>
>>> Ok, here's another (a bit more challenging) question.
>>>
>>> Imagine that I have a S species and a S x 2 matrix of altitudinal limits
>>> (min and max elevation). How would you compute the number of co-occurring
>>> species for each of the S species?
>>>
>>> Thanks again for your assistance.
>>>
>>> Karla
>>>
>>> On Tue, Jul 14, 2015 at 5:14 AM, Stefano Leonardi <
>>> stefano.leonardi at unipr.it
>>> > wrote:
>>>
>>> >
>>> > The first think that came to my mind:
>>> >
>>> > overlap <- function(v1,v2) {
>>> > ov <-min(max(v1), max(v2)) - max(min(v1), min(v2))
>>> > ifelse(ov > 0, ov, 0)
>>> > }
>>> >
>>> > overlap(dat[1,], dat[2,])
>>> > [1] 0.5
>>> >
>>> >
>>> > Ciao
>>> > Stefano
>>> >
>>> > On 14/07/2015 01:03, Karla Shikev wrote:
>>> >
>>> >> Hi there,
>>> >>
>>> >> This is a newbie question, and I'm sure there are simple ways to do
>>> this,
>>> >> but I've spent my entire afternoon and I couldn't get it to work.
>>> >>
>>> >> Imagine that I got the altitudinal range of different species. For
>>> >> instance:
>>> >>
>>> >>  dat<-matrix(c(1,3,2.5,4), ncol=2, byrow=TRUE)
>>> >>> dat
>>> >>>
>>> >>       [,1] [,2]
>>> >> [1,]  1.0    3
>>> >> [2,]  2.5    4
>>> >>
>>> >>
>>> >> The first line indicates that this species is found between 1 and 3,
>>> >> whereas the second species was found between 2.5 and 4.
>>> >>
>>> >> I need a simple way to calculate the overlap of their extents (0.5 in
>>> this
>>> >> case). This way should provide 0 if there is no overlap, and it should
>>> >> also
>>> >> work in the case where one subject is found only within the extent of
>>> the
>>> >> second subject.
>>> >>
>>> >> Any help will be greatly appreciated.
>>> >>
>>> >> Karla--
>>> >>
>>> > ======================================================================
>>> >  Stefano Leonardi
>>> >  Dipartimento di Bioscienze
>>> >  Universita` di Parma
>>> >  Viale Usberti 11a                             Phone : +39-0521-905659
>>> >  43124 PARMA  (Italy)                          Fax   : +39-0521-905402
>>> >
>>> >  Il mio photoblog:                http://stefanoleonardi.wordpress.com
>>> > ======================================================================
>>> >
>>>
>>>         [[alternative HTML version deleted]]
>>>
>>> _______________________________________________
>>> R-sig-ecology mailing list
>>> R-sig-ecology at r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-sig-ecology
>>>
>>
>>
>>
>> --
>> Glen Sargeant, Ph.D.
>> Research Wildlife Biologist/Statistician
>> USGS Northern Prairie Wildlife Research Center
>> E-mail: gsargeant at usgs.gov
>> Phone: (701) 253-5528
>>
>
>
>
> --
> Glen Sargeant, Ph.D.
> Research Wildlife Biologist/Statistician
> USGS Northern Prairie Wildlife Research Center
> E-mail: gsargeant at usgs.gov
> Phone: (701) 253-5528
>

	[[alternative HTML version deleted]]



More information about the R-sig-ecology mailing list