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" 出现在最后一个条目之后。我不知道你想要的是哪一个,但它应该是两个之一。
以下代码将 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" 出现在最后一个条目之后。我不知道你想要的是哪一个,但它应该是两个之一。