2012-03-09 67 views
0

我有一個由概率函數生成的日期的模擬矩陣。每列表示一次迭代。在矩陣中將列入日期的列分成幾十列

我想每次運行分別幾十年,並將它們轉儲成一個新的矩陣,其中每列是所有十年的長度,一個單一的運行與十年的數字日期。

我已經成功地做到了這一點的日期的一個載體,而不是一個矩陣:

「日期」是的觀測數據時,某些樹木在人口

#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:

這基本上就是我需要做的,只是在一個矩陣的每個單獨的列。

我的矩陣如下所示(它實際上有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

我已經在R-幫助今天上午回答了這一點,雖然你所提供的數據看上去像數據的轉置你給這裏:

> 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)     }) 
+0

Dr. Winsemius,感謝您的回覆。我試圖將每列中的日期分成長度等於總共數十年的矩陣。我需要這是一個矩陣,其行數等於該矩陣中表示的可能數十年的總數。 「allDecades」是從一些收集的數據計算出來的,所以它的長度與模擬數據不同。如果我對此不太清楚,我很抱歉。 – jtgarcia 2012-03-09 18:42:59

+0

這是否意味着第二種解決方案就是您要求的? – 2012-03-09 18:45:24

+0

這裏的總體目標是:對於我的模擬的每一次運行,我都需要知道在每個十年中建立了多少個人。我的模型吐出一個矩陣,其中每列是一次運行。 – jtgarcia 2012-03-09 18:50:06