2017-04-01 79 views
-1

任何人都可以幫助我解決這個問題嗎?使用R識別矢量內的字符串

我有一個這樣的載體:

vec1 <- c("10F/I/V", "33F", "36I", "54A/L/M/S/T/V", "62V", "82A/C/F/G", "84V", "90M") 

而另外一個是這樣的:

vec2 <- c("10F", "10L", "10I", "33G", "47A", "54A", "54T", "62V") 

我想計算結果等於3,因爲VEC 2具有字符串「10F」和「 10I「屬於同一個字符串」10F/I/V「,它也具有屬於」54A/L/M/S/T/V「和」62V「的字符串」54A「和」54T「。

謝謝!

+0

不確定你想要完成什麼。你希望得到什麼結果? – jwells

+0

也許'sum(substr(vec1,1,3)%i​​n%vec2)',但是這對於在vec1元素中間發生匹配的場景是不可擴展的。 – lmo

回答

0

您可以擴展原始矢量vec1明確構建串像54A54L54M ......一旦你的,你可以找到任何模式,稱之爲「匹配」,當您去。

vec1 <- c("10F/I/V", "33F", "36I", "54A/L/M/S/T/V", "62V", "82A/C/F/G", "84V", "90M") 

vec2 <- c("10F", "10L", "10I", "33G", "47A", "54A", "54T", "62V") 


out1 <- mapply(x = gsub("(^\\d+)(.*$)", "\\1", vec1), 
       y = strsplit(gsub("\\d+", "", vec1), "/"), 
       FUN = function(x, y) { 
       # expands the vector to make comparisons easy using regex 
       xy <- paste(x, y, sep = "") 
       # finds individual combination 
       m <- sapply(xy, FUN = grepl, vec2) 
       # finds if strings appears in original element (element is a column) 
       apply(m, MARGIN = 2, any) 
       }) 

> sapply(out1, any) 
    10 33 36 54 62 82 84 90 
TRUE FALSE FALSE TRUE TRUE FALSE FALSE FALSE 
> sum(sapply(out1, any)) 
[1] 3 
+0

完美!!!!非常感謝!!! –