2016-01-29 159 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

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