我有一个模拟的日期矩阵,我是从概率函数生成的。每列代表一次迭代。
我想将每次运行分开几十年并将它们转储到一个新的矩阵中,其中每列是所有几十年的长度,单个运行的数字日期按十年分组。
我已经成功地为一个日期向量做了这个,但没有为矩阵做过:
“日期”是观察数据的向量,表示何时在群体中建立某些树
#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:
0 0 0 0 0 0 0 0 0 0 1 1 1 0 1 2 0 1 3 0 1 3 8 5 9 8 5 5 4 10 3 6 9 17 32 37 35 25 31 41 41 44 45 40 50 43 59 42 46 28 16 18 20 16 11 4 7 1
这基本上是我需要做的,只针对矩阵中的每个单独的列。
我的矩阵看起来像这样(它实际上有835行,但我用head()
来缩短它):
1 2 3 4 5
1 1891 1791 1771 1741 1981
2 1881 1851 1941 1831 1841
3 1981 1861 1761 1781 1791
4 1911 1901 1941 1801 1801
5 1771 1751 1841 1751 1951
6 1821 1871 1821 1691 1851
7 1851 1851 1931 1921 1931
8 1921 1941 1601 1751 1861
9 1741 1761 1931 1791 1891
10 1751 1891 1951 1931 1901
每列都是我模拟的独立迭代(runs <- 10
)。如何将每列分成几十年?
答案 0 :(得分:0)
我今天早上已经在r-help上回答了这个问题,虽然您提供的数据看起来像是您在此处提供的数据的转置:
> dates <- scan()
1: 1891 1791 1771 1741 1981
6: 1881 1851 1941 1831 1841
11: 1981 1861 1761 1781 1791
16: 1911 1901 1941 1801 1801
21: 1771 1751 1841 1751 1951
26: 1821 1871 1821 1691 1851
31: 1851 1851 1931 1921 1931
36: 1921 1941 1601 1751 1861
41: 1741 1761 1931 1791 1891
46: 1751 1891 1951 1931 1901
51:
Read 50 items
dates <- matrix(dates, ncol=5, byrow=TRUE)
apply( dates, 2, function(colm){
1 + max(findInterval(colm, allDecades)) -
min(findInterval(colm, allDecades) )
} )
#-----------
#[1] 25 20 36 25 20
在我的回答中,我注意到你的问题描述含糊不清。如果您希望这是一个矩阵,其行数等于'allDecades'的长度,那么请使用以下代码:
apply( dates, 2, function(colm) {
alldec0 <- rep(0, length(allDecades))
names(alldec0) <- 1:length(alldec0)
alldec0[ as.numeric(names(table(findInterval(colm, allDecades))))] <-
table(findInterval(colm, allDecades))
return(alldec0) } )