我有一个向量,我想在每次它包含长度为 n 的升序/降序值序列时进行检查。到目前为止我所知道的是,我可以在向量上使用 !is.unsorted() 和 is.unsorted() 来确定它是升序还是降序,但不知道如何对每个元素执行此操作。任何建议将不胜感激!
v <- c(1,2,1,4,5,7,8,10,6,4,2,1,2)
n <- 5
我希望输出一个包含 1、-1 和 0 的向量,用于升序、降序和未排序。在这种情况下,它将输出:
[1] 0 0 0 0 0 0 1 1 0 0 0 -1 0
抱歉,如果这令人困惑。
最佳答案
使用data.table
包:
d <- data.table::frollsum(sign(diff(v)), n - 1, 0)
c(0, data.table::fcase(d == n - 1, 1, d == 1 - n, -1, default = 0))
[1] 0 0 0 0 0 0 1 1 0 0 0 -1 0
计算相邻差异并取符号(检测升序/降序)。然后计算滚动总和并检测该总和何时等于 n-1(n 个连续升序元素)或 1-n(n 个连续降序元素)。
关于r - 如何每次检查向量 (R) 中是否有 n 个升序/降序值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71318422/