2016-01-29 198 views
0

我想隨着時間推移計算​​棲息地覆蓋變化,從T0和基於干擾發生(Disturbance_freq)和R.恢復(Recovery_rate)我需要循環這個計算基於Total_Disturbance每個Region(這對每個地區都是不同的)。循環計算

我的數據是設置爲這樣:

Region Distur_rate Tot_dist Dist_freq Impact Recovery_Rate T0   T1 
0  0.29  29  3.45  20  0.47   0.59  ? 
1  0.17  17  5.88  20  0.47   0.59  ? 
2  0.4   40  2.5   20  0.47   0.59  ? 

我試圖計算:

T1 = (((T0 + Recovery_Rate x Dist_freq) - (20 x (T0 + Recovery_Rate x Dist_freq)/100)) 
T2 = (((T1 + Recovery_Rate x Dist_freq) - (20 x (T1 + Recovery_Rate x Dist_freq)/100)) 

等等

爲此我編寫以下但必須有一個更有效的方法來做到這一點:

Data <-cbind(Data, (Data$T0 + Data$Recovery_rate * Data$Disturbance_freq)- Data$Impact * 
        (Data$T0+Data$Recovery_rate * Data$Disturbance_freq)/100) 

Data <-cbind(Data, (Data$T1 + Data$Recovery_rate * Data$Disturbance_freq)-Data$Impact * 
        (Data$T1+Data$Recovery_rate * Data$Disturbance_freq)/100) 
+0

我認爲這是最好張貼的小例子,人們可以用可行的輸入數據和預期的輸出方一道。 – Gopala

+0

請編輯您的文章與樣本數據集(最好是'dput(...)')的結果,並顯示你想要你的結果看起來像,即提供[可重現的例子](http://stackoverflow.com /問題/ 5963269 /如何對做 - 一個偉大-R重現-例子)。 – alistaire

回答

0

您的括號似乎並不正確,因此您需要查看它們。但是這是apply的情況。打電話給你的桌子上有data

data$T1 <- apply(data,1,function(x) { 
    (((x[7] + x[6]) * x[4]) - (x[5] * (x[7] + x[6]) * x[4])/100) 
    }) 
data$T2 <- apply(data,1,function(x) { 
    (((x[8] + x[6]) * x[4]) - (x[5] * (x[8] + x[6]) * x[4])/100) 
    }) 
+0

非常感謝。它完全奏效。 –