我试图将向量(b)的元素与向量(a)的元素进行匹配,其中向量(b)的每个元素在其末尾具有向量(a)的一个元素。解决方案应该返回一个长度为(b)的向量,其中包含(a)中匹配的索引。
所以,例如:
a<-c('R2','R3','N_3','R1')
b<-c('sp_one_R1', 'sp_one_N_3', 'sp_two_R3')
some.function(a,b)
should give:
[1] 4 3 2
我已经调查了pmatch和grep + lapply,但无法找到解决方案。我也想过将(b)的元素分解为&#39; _&#39;然而,这个角色也可以出现在(a)的元素中,因此也不会起作用。
非常感谢任何帮助!
答案 0 :(得分:1)
使用map_dbl
中的类型安全purrr
(link到Jenny BC的教程)我得到了
a<-c('R2','R3','N_3','R1')
b<-c('sp_one_R1', 'sp_one_N_3', 'sp_two_R3')
myfun <- function(source_vec, dest_vec) {
purrr::map_dbl(source_vec, ~ which(stringr::str_detect(., dest_vec))[1])
}
myfun(b, a) # 4 3 2
答案 1 :(得分:1)
在基数R中,使用sapply
,然后使用max.col
查看匹配的值:
max.col(sapply(a, grepl, b))
#[1] 4 3 2
这是有效的,因为核心sapply
部分返回此矩阵:
sapply(a, grepl, b)
# R2 R3 N_3 R1
#[1,] FALSE FALSE FALSE TRUE
#[2,] FALSE FALSE TRUE FALSE
#[3,] FALSE TRUE FALSE FALSE