我希望有人能幫我弄清楚如何編寫一個if-else語句來處理我的數據集。我有樹木年增長率的數據。我需要計算一年中增長率是否下降了50%以上。我無法應用ifelse語句來計算我的最終字段。我是比較新的R,所以我的代碼很可能不是很有效,但這裏是我到目前爲止有一個例子: 有關示例數據集,Ifelse語句在R中的數據框
test<-data.frame(year=c("1990","1991","1992","1993"),value=c(50,25,20,5))
year value
1 1990 50
2 1991 25
3 1992 20
4 1993 5
我再計算出當年的區別與前一年的增長(「值」):
test[-1,"diff"]<-test[-1,"value"]-test[-nrow(test),"value"]
year value diff
1 1990 50 NA
2 1991 25 -25
3 1992 20 -5
4 1993 5 -15
,然後計算了每個年增長的50%將是:
test$chg<-test$value * 0.5
year value diff chg
1 1990 50 NA 25.0
2 1991 25 -25 12.5
3 1992 20 -5 10.0
4 1993 5 -15 2.5
我再嘗試使用ifelse聲明計算一個字段「突變」,當從一年下降到下一個大於50%時,該字段將是「1」。這是我想使用的代碼,但我不知道如何正確地從上年引用「CHG」字段,因爲我得到一個錯誤(下面複製):
test$abrupt<-ifelse(test$diff<0 && abs(test$diff)>=test[-nrow(test),"chg"],1,0)
Warning message:
In abs(test$diff) >= test[-nrow(test), "chg"] :
longer object length is not a multiple of shorter object length
> test
year value diff chg abrupt
1 1990 50 NA 25.0 NA
2 1991 25 -25 12.5 NA
3 1992 20 -5 10.0 NA
4 1993 5 -15 2.5 NA
測試當我剛剛分配了幾個數字時,類似的ifelse語句的工作方式就起作用了,但我不確定如何在數據框的上下文中使其工作。這裏正在它的一個例子短短值:
prevyear<-50
curryear<-25
chg<-prevyear*0.5
> chg
[1] 25
> diff<-curryear-prevyear
> diff
[1] -25
> abrupt<-ifelse(diff<0 && abs(diff)>= chg,1,0)
> abrupt
[1] 1
如果有人可以幫助我弄清楚如何申請一個類似的ifelse語句來我的數據幀我將不勝感激!感謝您提供任何幫助。
謝謝你, 凱蒂
在一個不相關的音符,有沒有寫這條線的另一種方式代碼 'test [-1,「diff」] < - test [-1,「value」] - test [-nrow(test),「value」]' –