我有一个单列数据框,想确定值是增加 (1) 还是减少 (-1),如果没有发现变化,则返回上次完成的计算。我认为我的代码应该这样做,但 dplyr 返回一个错误,说“对象”“未找到”,我认为这是因为它本身。想过如何做到这一点吗?
df <- data.frame(Val=c(1:5,5,5,5:1))
df=df %>% mutate(ValDirection = ifelse(Val>lag(Val,1), 1, (ifelse(Val<lag(Val,1),-1, lag(ValDirection ,1)))))
期望结果应该是:
df <- data.frame(Val=c(1:5,5,5,5:1), ValDirection =c(1,1,1,1,1,1,1,1,-1,-1,-1,-1))
这种方法是您可以使用的一种方法:
df %>% mutate(lag = lag(Val, 1), # Lag you values in new column
lag = coalesce(lag, Val), # Replace NA with corresponding value from Val column
ValDirection = ifelse(Val == lag, 1, Val - lag)) %>% # Assign lag values
select(-lag)
这种方法很灵活,因为如果你的滞后是 -/+ > 1,那么它会返回总滞后。如果您只想使用“-1”或“1”来指示方向,请修改
ifelse()
语句以适应。