对于这个问题,我并不是在寻找山谷,而是寻找一种识别数字序列中重复“山谷”的方法。
我有这个数据
x <- c(1,1,2,2,1,1,2,2,3,3,3,2,2,2,3)
所以我尝试了以下方法:
test <- data.frame(x)
test <- test %>% mutate(Lag = c(tail(x, -1), NA))
which(test$x > test$Lag)+1
这让我获得了第 5 名和第 12 名的位置。
问题是,如何获取代码来识别数字序列中剩余的“山谷”。预期输出将识别位置 5、6 和 12、13、14。
它有点类似于时间序列中的局部最小值,但这不是我想要的。
我还想将它们标识为 block ;例如位置 5、6 属于类别 1,位置 12、13、14 属于类别 2。
提前非常感谢!
最佳答案
这可以使用cummax
来解决。使用您的x
,
cummax(x)
# [1] 1 1 2 2 2 2 2 2 3 3 3 3 3 3 3
which(x != cummax(x))
# [1] 5 6 12 13 14
x[x != cummax(x)]
# [1] 1 1 2 2 2
给你 5-6 和 12-14,然后你就知道每个被分配到哪个类别。您可以使用 split
或某些分箱函数对它们进行更有意义的分组。
关于r - 在数字序列中查找 "valleys",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42756559/