Re: [R] binning dates by decade for simulated data
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.
[R] binning dates by decade for simulated data
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 Each column is a separate run (runs - 10 ) . How can I bin each column into decades separately? I'll bet this is super easy, but my R-skills are seriously limited!!! Thanks for any help! ~Jeff -- View this message in context: http://r.789695.n4.nabble.com/binning-dates-by-decade-for-simulated-data-tp4457766p4457766.html Sent from the R help mailing list archive at Nabble.com. __ 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.
[R] binning dates by decade for simulated data
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 Each column is a separate run (runs - 10 ) . How can I bin each column into decades separately? 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.