查找值是否大于向量中所有先前值的函数

时间:2019-06-24 05:59:09

标签: r

这应该非常简单,但是我的知识有限。 我试图找出是否有任何值大于所有先前的值。 一个例子是

x<-c(1.1, 2.5, 2.4, 3.6, 3.2)

结果:

NA  True False True False

我的真实值是很多小数点后的测量值,所以我怀疑我会两次获得相同的值

3 个答案:

答案 0 :(得分:11)

您可以使用cummax()获得迄今为止的最大价值。尽管元素1是x >= cummax(x)TRUE基本上可以为您提供答案,所以您只需要更改它:

> out = x >= cummax(x)
> out[1] = NA
> out
[1]    NA  TRUE FALSE  TRUE FALSE

答案 1 :(得分:1)

尽管@Marius完全正确。这是一个带有循环的选项

sapply(seq_along(x), function(i) all(x[i] >= x[seq_len(i)]))
#[1]  TRUE  TRUE FALSE  TRUE FALSE

或具有明确的for循环的相同逻辑

out <- logical(length(x))
for(i in seq_along(x)) {
   out[i] <- all(x[i] >= x[seq_len(i)])
}
out[1] <- NA
out
#[1]    NA  TRUE FALSE  TRUE FALSE

答案 2 :(得分:0)

我们可以使用lapply

unlist(lapply(seq_along(x), function(i) all(x[i] >=x[seq(i)])))
#[1]  TRUE  TRUE FALSE  TRUE FALSE

或与max.col

max.col(t(sapply(x, `>=`, x)), 'last') > seq_along(x)
#[1] FALSE  TRUE FALSE  TRUE FALSE

或带有for循环

mx <- x[1]
i1 <- logical(length(x))
for(i in seq_along(x)) {i1[i][x[i] > mx] <- TRUE; mx <- max(c(mx, x[i]))}