按顺序匹配矢量

Sat*_*ati 11 r vector string-matching

我有2个向量.

x=c("a", "b", "c", "d", "a", "b", "c")
y=structure(c(1, 2, 3, 4, 5, 6, 7, 8), .Names = c("a", "e", "b", 
"c", "d", "a", "b", "c"))
Run Code Online (Sandbox Code Playgroud)

我想匹配aa,bb相应的序列,从而使x[2]匹配y[3],而不是y[7]; 和x[5]匹配y[6]而不是y[1]等等.

lapply(x, function(z) grep(z, names(y), fixed=T))
Run Code Online (Sandbox Code Playgroud)

得到:

[[1]]
[1] 1 6

[[2]]
[1] 3 7

[[3]]
[1] 4 8

[[4]]
[1] 5

[[5]]
[1] 1 6

[[6]]
[1] 3 7

[[7]]
[1] 4 8
Run Code Online (Sandbox Code Playgroud)

匹配所有实例.我如何得到这个序列:

1 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)

那么元素x可以相应地映射到相应的值y

Ony*_*mbu 10

你其实在找 pmatch

pmatch(x,names(y))
[1] 1 3 4 5 6 7 8
Run Code Online (Sandbox Code Playgroud)


tal*_*lat 6

您可以根据每个元素出现的次数更改名称属性,然后更改子集y:

x2 <- paste0(x, ave(x, x, FUN=seq_along))
#[1] "a1" "b1" "c1" "d1" "a2" "b2" "c2"
names(y) <- paste0(names(y), ave(names(y), names(y), FUN=seq_along))
y[x2]
#a1 b1 c1 d1 a2 b2 c2 
# 1  3  4  5  6  7  8 
Run Code Online (Sandbox Code Playgroud)