我有一个一列的数据框,想确定值是增加(1)还是减少(-1),当没有发现变化时,返回最后一次计算。我认为我的代码应该可以做到这一点,但dplyr返回一个错误,说“object”“not found”,我认为这是因为它本身。有没有想过如何做到这一点?
df <- data.frame(Val = c(1:5,5,5,5:1,1,1,1,6,1,1,5:1))
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, 1,1,1,6,1,1,5:1),
ValDirection = c(1,1,1,1,1,1,1,1,-1,-1,-1,-1,-1,-1,-1,1,-1,-1,1,-1,-1,-1,-1))
1条答案
按热度按时间8zzbczxx1#
发生错误的原因是您在定义
ValDirection
之前调用了它。您可以将lag(ValDirection, 1)
替换为NA
,并使用tidyr::fill()
用以前的值填充缺失值。您也可以使用
dplyr
中的case_when()
来替换嵌套的ifelse()
:另一种想法是:
输出