[R-sig-eco] altitudinal overlap
Sargeant, Glen
gsargeant at usgs.gov
Wed Jul 15 02:31:26 CEST 2015
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