R:更改前的值

R: value preceding a change

以下代码将 test 拆分为减少、增加或不变的数字。

test <- c(1,2,3,4,5,5,4,1,2,3)
ifelse(diff(test)>0, "up", ifelse(diff(test)<0, "down", "no change"))

[1] "up" "up" "up" "up" "no change" "down" "down" "up" "up"  

但是,我需要 "up""down""no change" 来反映更改之前的数字,而不是获得更改的结果。

例如,上面集合中的最后一个 1 会向上,因为它后面跟着一个更大的数字。

我尝试了各种延迟,但由于它没有改变 if 语句的逻辑,所以它没有用。有办法吗?

编辑:

预期输出类似于上面示例中显示的输出,但不是因为第一个数字没有前导而删除它,而是排除最后一个数字,因为它后面没有变化。

真的希望这是有道理的,但如果没有,我会尽力进一步澄清。

diff(x) returns长度比x小一的数组,所以diff(x)[i]=x[i+1]-x[i]。无论您要考虑这个更改 "before i+1" 还是更改 "after i" 都没有区别,它仍然是相同的值。

如果您想取回与输入长度相同的数组,对于您的情况,请尝试 c("no change", result)c(result, "no change"),这会将结果填充为与输入相同的长度输入,并表示 "no change" 出现在第一个条目之前,或者 "no change" 出现在最后一个条目之后。我不知道你想要的是哪一个,但它应该是两个之一。