[英]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.max
与TRUE
进行比较。
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.