r - 提取递增子序列

标签 r subsequence

我希望从第一个元素开始提取向量的递增子序列。例如,从这个向量:a = c(2, 5, 4, 0, 1, 6, 8, 7)
...我想回来:res = c(2, 5, 6, 8)

我以为我可以使用循环,但我想避免它。 sort 的另一个尝试:

a = c(2, 5, 4, 0, 1, 6, 8, 7)
ind = sort(a, index.return = TRUE)$ix
mat = (t(matrix(ind))[rep(1, length(ind)), ] - matrix(ind)[ , rep(1, length(ind))])
mat = ((mat*upper.tri(mat)) > 0) %*% rep(1, length(ind)) == (c(length(ind):1) - 1)
a[ind][mat]

基本上我对输入向量进行排序并检查索引是否验证了“右侧没有索引更低”的条件,这意味着事先没有更大的值。

但这似乎有点复杂,我想知道是否有更简单/更快的解决方案,或者 R 中的预构建函数。

谢谢

最佳答案

一种可能性是找到向量的累积最大值,然后提取唯一元素:

unique(cummax(a))
# [1] 2 5 6 8

关于r - 提取递增子序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30750687/

相关文章:

javascript - 使用javascript将 'long'数据转换为 'wide'数组

r - 将特定版本的 R 添加到 docker 容器

java - 通过我的方法对数组进行排序错误Java

java - String X 是 String Y Java 的子序列吗

r - 在 R Markdown 中合并表格

r - 如何将泊松回归的系数限制为 R 中的正数?

arrays - 给定一个数字列表和一个数字 k,返回列表中的任意两个数字是否相加为 k

c - 求和在给定范围内的数组中的连续子序列数的递归函数

string - 要插入字符串以将其转换为回文的最少字符数

r - R plot 图例中的换行符