R 方程中参数的计算

R 方程中参数的计算,r,R,我想对我的数据集(SMD)执行上述等式。我首先需要将数据集的第一列除以50(等式2),称之为SMDI,然后进入第一个等式,将SMDIt-1与原始SMD相加。我有两个值p和q(p_dry和p_wet,q_dry和q_wet)。我想使用p_dry和q_dry,如果我的单元格值为正,否则p_wet和q_wet在等式1中。我写了下面的代码,但它给了我错误。不适用/不适用论点。请帮忙 SMDIt=p*SMDIt-1+q*SMDt SMDIt=SMDt/50 代码: 3.343327144 0.07658

我想对我的数据集(SMD)执行上述等式。我首先需要将数据集的第一列除以50(等式2),称之为SMDI,然后进入第一个等式,将SMDIt-1与原始SMD相加。我有两个值p和q(p_dry和p_wet,q_dry和q_wet)。我想使用p_dry和q_dry,如果我的单元格值为正,否则p_wet和q_wet在等式1中。我写了下面的代码,但它给了我错误。不适用/不适用论点。请帮忙

SMDIt=p*SMDIt-1+q*SMDt
SMDIt=SMDt/50
代码:

3.343327144 0.076583722 -4.316073117    -6.064319011    -1.034313982    1.711678831 2.062381759 5.632386548 6.017760438
4.467709087 1.632745678 -2.045736377    -3.601413064    1.695347213 3.295933998 4.070685302 7.743864617 8.348716373
8.256385028 5.635534811 2.707796712 1.572985845 6.066710978 7.095101029 7.941167874 11.37490758 12.15712496
NA  NA  NA  NA  NA  NA  NA  NA  NA
NA  NA  NA  NA  NA  NA  NA  NA  NA
NA  NA  NA  NA  NA  NA  NA  NA  NA
-47.4749727 -62.45954133    -69.42311677    -68.04854477    -69.86363461    -56.6566393 -44.02624374    -34.68257496    -5.528397863
-57.44464723    -74.11667952    -83.07777747    -81.88546602    -84.32488173    -72.37428075    -61.04778523    -51.84892678    -20.81696219
-12.6032741 -26.27089119    -36.55478576    -30.40468773    -36.15889518    -33.71339142    -16.63378788    -4.849972012    -1.667644897
-28.28948158    -38.05693676    -43.2879285 -35.34546364    -40.09848824    -34.40754496    -18.41988896    -9.867125675    -7.493617422
NA  NA  NA  NA  NA  NA  NA  NA  NA
-35.04117468    -38.74252722    -42.69080876    -43.06064215    -40.85844545    -36.79603495    -37.92408262    -34.51428202    -32.54118632
-29.35688054    -33.7004665 -37.88555224    -39.06340145    -37.19884049    -29.8488303 -32.48244008    -28.52426895    -28.39245064
-1.422800439    -6.972537109    -11.86824507    -13.14543917    -9.893061342    1.11258721  -0.415834635    2.424939039 2.65615071
data=read.table('SMD.csv',header=TRUE,sep=','))
SMD=数据。矩阵(数据)

p_dry您不需要循环。在R中,我们使用向量

data=read.table('SMD.csv', header=TRUE, sep=',')
SMD=data.matrix(data)
p_dry<-0.1542
q_dry<-0.0338
p_wet<-0.1660
q_wet<-0.0333
SMDI<-  matrix(0,nrow=nrow(SMD),ncol=ncol(SMD))
      for (i in 2:nrow(SMD)) {
        for(j in 1:ncol){
        if(is.na(SMD[i,j])){
        SMD[i,j]<-NaN
          SMDI[1,j] <-SMD[1,j]/50
        if(SMD[i,j]<0)
          SMDI[i,j]<- p_dry[j]*SMDI[i-1,j]+SMD[i,j]*q_dry[j] else
          SMDI[i,j]<- p_wet[j]*SMDI[i-1,j]+SMD[i,j]*q_wet[j]
          }                                                                                                
          }
}

write.table(SMDI,(file='SMDI.csv')

SMDIt用户151996,它对我不起作用。它只给我一列,但我需要它来运行大约200列的操作。我有p_dry和q_dry大于0,p_wet和q_wet小于0。如果你能建议我在数据框里做,那就太好了。Thanks@rosyrana我编辑了我的答案。我以为您只想计算第一列的方程式,所以我使用了
SMD[,1]
(这是
SMD
的第一列)。我用
SMD
替换了它,所以它应该适用于整个矩阵。
SMDIt <- SMD/50 # second equation
# defining vectors of p and q values corresponding to SMDIt
p <- ifelse(SMDIt>0, p_dry, p_wet) 
q <- ifelse(SMDIt>0, q_dry, q_wet)
SMDIt <- p*SMDIt - 1 + q*SMD # first equation