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)
我想匹配a
到a
,b
到b
相应的序列,从而使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)
您可以根据每个元素出现的次数更改名称属性,然后更改子集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)
归档时间: |
|
查看次数: |
620 次 |
最近记录: |