繁体   English   中英

创建第一个匹配条件的逻辑向量

[英]Create logical vector of first matching condition

如何创建第一个匹配条件为 TRUE 否则为 FALSE 的逻辑向量?

v = rep(1:4, 3)
v == 3
#[1] FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE FALSE FALSE  TRUE FALSE

==对所有等于 3 的值给出 TRUE,但我只希望第一个为 TRUE:

#[1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

我想出了可能的解决方案,但它总是使用索引,然后构造逻辑向量,我想知道是否有更简单的解决方案。

tabulate(match(3, v), nbins = length(v))
#[1] 0 0 1 0 0 0 0 0 0 0 0 0

seq_along(v) == min(which(v == 3))
#[1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

我们可能会使用

v==3&!duplicated(v)
[1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

或者

seq_along(v)==match(3,v)
 [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

在否定向量中, replace which.maxTRUE进行比较。

replace(!v, which.max(v == 3), TRUE)
# [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

或取模与cumsum组合。

cumsum(cumsum(v %% 3 == 0)) == 1
# [1] FALSE FALSE  TRUE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE

暂无
暂无

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

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