我想找到以前的最大值列表。所以对于一个向量: 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/