在 mutate 中返回先前的自我计算作为使用条件时的选项

问题描述 投票:0回答:1

我有一个单列数据框,想确定值是增加 (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))
r if-statement dplyr mutate
1个回答
0
投票

这种方法是您可以使用的一种方法:

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()
语句以适应。

© www.soinside.com 2019 - 2024. All rights reserved.