On Mar 8, 2012, at 7:37 PM, Jeff Garcia wrote:

I have a simulated matrix of dates that I generated from a probability function. Each column represents a single iteration.

I would like to bin each run _separately_ by decades and dump them into a new matrix where each column is the length of all decades a single run with the number dates binned by decade.

I have successfully done this for a single vector of dates, but not for a matrix:

"dates" is a vector of observed data representing when certain trees established in a population

#-----find min and max decade -----#

       minDecade <- min(dates)
       maxDecade <- max(dates)

#-----create vector of decades -----#

       allDecades <- seq(minDecade, 2001, by=10)

#-----make empty vector of same length as decade vector-----#

       bin.vec <- rep(0,length(allDecades))

#-----populate bin.vec (empty vector) with the number of trees in each decade-----#

       for (i in 1:length(allDecades)) {

bin.vec[i] <- length(which(dates==allDecades[i]))
               }


bin.vec : [1]    0  0  0  0  0  0  0  0  0  0  1  1  1  0  1  2  0  1
[19] 3 0 1 3 8 5 9 8 5 5 4 10 3 6 9 17 32 37 [37] 35 25 31 41 41 44 45 40 50 43 59 42 46 28 16 18 20 16
              [55] 11  4  7  1


My matrix looks like this (it actually had 835 rows, I used head (x) just to demonstrate).

head(bin.mat)
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [, 9] [,10]
[1,] 1831 1811 1841 1881 1851 1871 1921 1821 1781  1561
[2,] 1851 1931 1821 1701 1841 1961 1941 1931 1891  1841
[3,] 1751 1861 1861 1751 1841 1841 1771 1971 1811  1871
[4,] 1831 1871 1741 1881 1871 1771 1821 1901 1901  1851
[5,] 1681 1861 1871 1811 1711 1931 1891 1771 1811  1821
[6,] 1931 1841 1841 1861 1831 1881 1601 1861 1891  1891

After setting up your allDecades vector to your liking perhaps something like:

apply( dates, 2, function(colm){
                     1 + max(findInterval(colm, allDecades)) -
                             min(findInterval(colm, allDecades) )
                                } )

With that data (although changing its name to "years"):

> years <- scan()
1:  1831 1811 1841 1881 1851 1871 1921 1821 1781  1561
11:  1851 1931 1821 1701 1841 1961 1941 1931 1891  1841
21:  1751 1861 1861 1751 1841 1841 1771 1971 1811  1871
31:  1831 1871 1741 1881 1871 1771 1821 1901 1901  1851
41:  1681 1861 1871 1811 1711 1931 1891 1771 1811  1821
51:  1931 1841 1841 1861 1831 1881 1601 1861 1891  1891
61:
Read 60 items
> years <- matrix(years, nrow=6, byrow=TRUE)
>  minDecade <- min(years)
>        maxDecade <- max(years)
>        allDecades <- seq(minDecade, 2001, by=10)
>

> apply( years, 2, function(colm){
+                      1 + max(findInterval(colm, allDecades)) -
+                              min(findInterval(colm, allDecades) )
+                                 } )
  [1] 26 13 14 19 17 20 35 21 13 34

You have not offered the requested correct answer with your data , so I leave it to you to decide whether the rules the 'findInterval' uses for determining boundaries with you interval-vector are to your requirements.


Each column is a separate run (runs <- 10 ) . How can I bin each column into decades separately?

That is not a good description of what I did but following that wording would have constructed a result that only a list object could have accepted because of the irregular lengths. I decided from your sample output that you just wanted a single number to describe the span of years.

I'll bet this is super easy, but my R-skills are seriously limited!!!

Thanks for any help!
~Jeff
        [[alternative HTML version deleted]]

______________________________________________
R-help@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.

David Winsemius, MD
West Hartford, CT

______________________________________________
R-help@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.

Reply via email to