我希望有人能帮助我解决如何编写if-else语句来处理我的数据集的问题。我有一些关于树木生长速率的数据,需要计算生长速率是否从一年到下一年下降了50%以上。我在应用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
然后我计算当前年份和上一年增长率之间的差异(“value”):
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语句计算一个字段"abrupt",当从一年到下一年的下降幅度大于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语句已在我分配几个数字时进行了测试,但我不确定如何使其在datframe的情况下工作。以下是它在仅有几个值时工作的示例:
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语句应用到我的数据框中,我将非常感激!谢谢您提供的任何帮助。
谢谢, Katie
test[-1, "diff"] <- test[-1, "value"] - test[-nrow(test), "value"]
- kRazzy R