我希望有人能帮我弄清楚如何编写一个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”]' –