如何从向量中提取特定 'string' 的最后一次出现
How to extract last occurrence of a particular 'string' from a vector
我有一个存储了几个二进制数的向量。由于这些都已经过滤了,所以也知道都是大于0的。
v <- c(1, 10, 11, 110, 10000, 101000, 100100000, 100001)
现在我想要一个 result_vector
(向量,因为输入向量是数据框中的一列)给我 position/location 向量 [=15= 中最后一次出现的 1
].我正在尝试 stringr::str_locate(as.Charachter(v), "1")[,2]
但它给了我这个向量第一次出现的结束位置。 stringr::str_locate_all
在列表中给出结果,因此在上下文中没有用。而且,我希望这个位置从后面算起。但是,如果我可以从左侧提取位置,则可以通过减去 nchar(as.Charachter(v))
将其转换为反向。请指导我如何继续获得
这样的结果
result_vector = c(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
一个stringi
选项可以是:
stri_locate_first(stri_reverse(v), fixed = "1")[, 1]
[1] 1 2 1 2 5 4 6 1
我有一个存储了几个二进制数的向量。由于这些都已经过滤了,所以也知道都是大于0的。
v <- c(1, 10, 11, 110, 10000, 101000, 100100000, 100001)
现在我想要一个 result_vector
(向量,因为输入向量是数据框中的一列)给我 position/location 向量 [=15= 中最后一次出现的 1
].我正在尝试 stringr::str_locate(as.Charachter(v), "1")[,2]
但它给了我这个向量第一次出现的结束位置。 stringr::str_locate_all
在列表中给出结果,因此在上下文中没有用。而且,我希望这个位置从后面算起。但是,如果我可以从左侧提取位置,则可以通过减去 nchar(as.Charachter(v))
将其转换为反向。请指导我如何继续获得
result_vector = c(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
一个stringi
选项可以是:
stri_locate_first(stri_reverse(v), fixed = "1")[, 1]
[1] 1 2 1 2 5 4 6 1