问题描述
我有一个存储有几个二进制数的向量。由于这些内容已经过过滤,因此也都知道它们都大于0。
v <- c(1,10,11,110,10000,101000,100100000,100001)
现在,我想要一个result_vector
(向量,因为输入向量是数据帧中的一列),所以给了我1
在向量v
中最后一次出现的位置/位置。我正在尝试stringr::str_locate(as.Charachter(v),"1")[,2]
,但给了我此向量首次出现的结束位置。 stringr::str_locate_all
在列表中给出结果,因此在上下文中没有用。而且,我希望这个位置从倒数开始。但是,如果我可以从左侧提取位置,则可以通过减去nchar(as.Charachter(v))
将其转换为反向位置。请指导我如何继续获得类似的结果
result_vector = c(1,2,1,5,4,6,1)
解决方法
一个stringi
选项可能是:
stri_locate_first(stri_reverse(v),fixed = "1")[,1]
[1] 1 2 1 2 5 4 6 1
,
result_vector <- nchar(v) - sapply(stringr::str_locate_all(as.character(v),"1"),max) + 1
,
由于数字是1或0,因此从逻辑上讲,您的问题等同于计算后跟零的数字。
result_vector <- nchar(x) - nchar(trimws(x,"right","0")) + 1L