r - 在数字序列中查找 "valleys"

标签 r

对于这个问题,我并不是在寻找山谷,而是寻找一种识别数字序列中重复“山谷”的方法。

我有这个数据

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/

相关文章:

r - 根据开始和结束时间查找重叠单元

r - 将列表转换为矩阵或数组?

r - 分组数据并绘制多条线

r - 将矩阵名称指定为 R 中的绘图标题

r - 可视化表或矩阵中数据帧的交集

python - 命名列表等效于 rpy2/dataframe 访问

r - 如何在 Likert 图的每个条形上输出正确的百分比?

Roxygen 无法打开文件/权限被拒绝/执行停止

r - 如何在 R 中生成自增 ID

r - 如何在我自己的网络服务器上导出和托管 ggvis 图表?