r - 按向量 R 的顺序查找先前最大值的列表

标签 r dplyr tidyverse

我想找到以前的最大值列表。所以对于一个向量: 3, 2,2,3,4,3,9,5,2,3,4,6,120,1 第一个最大值为 3,第二个最大值为 4(因为 4>3),然后是 9(因为 9>4),然后是 120 (120>9) 因此,作为输出,我需要以下位置: 1,5,7,13

是否可以在不使用 for 循环的情况下执行此操作?

```
vector<-c(3, 2,2,3,4,3,9,5,2,3,4,6,120,1)
results<-1
max<-3
for(i in 2:length(vector)){
if(vector[i]>max{
results<-c(results, i)
max<-vector[i]}
else {next}
}
```

最佳答案

这可以通过游程编码来完成:

vec <- c(3,2,2,3,4,3,9,5,2,3,4,6,120,1)
r <- rle(cummax(vec))
c(1, 1+cumsum(r$lengths)[-length(r$lengths)])
# [1]  1  5  7 13

@user20650 的一个变体更短、更简洁(谢谢!):

which(as.logical(c(1, diff(cummax(vec)))))
# [1]  1  5  7 13

关于r - 按向量 R 的顺序查找先前最大值的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69891087/

相关文章:

r - 如何将表输出复制到剪贴板?

r - 仅使用 tidyverse 从 R 中每一行的唯一代码中提取某些字母

r - 什么 'Can' t 在顶层使用 `!!!`。是什么意思以及如何解决?

r - Latex和R之间的工作流程

r - 在 R 中*快速*将字符转换为日期

根据因子级别重新格式化标签/保留 ggplot2::facet_wrap() 中多因子构面的顺序

r - 使用 Dplyr 查找数字是否减少或增加的差异

r - 如何根据 NA 与字母表对值进行分组

r - dplyr summarise_each 与 na.rm

r - 从宽到长的正则表达式 R