繁体   English   中英

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

[英]Function to find if a value is greater than all prior values in a vector

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

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

结果:

 NA True False True False 

我的实际值是带有许多小数位的测量值,所以我怀疑我会得到两次相同的值

cummax()您可以使用cummax()来获得最大值。 x >= cummax(x)基本上给出了答案,虽然元素1为TRUE ,所以你只需要改变它:

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

虽然@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

我们可以使用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]))}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM