2017-07-31 47 views
1

我有幾個數據幀匹配模式和替換字符串以進行替換。一個的前幾行是這樣的:矢量化字符串替換顯示奇怪的行爲

> df 
    pattern repl 
1  1 111 
2  2 112 
3  3 113 
4  5 114 
5  6 115 

我想,以取代在給定的矢量字符串(我們將在這裏稱之爲str_vector)。假設,str_vector看起來像這樣:

> str_vector 
[1] "1" "2" "3" "4" NA "6" "7" "8" "9" "10" 

我不能夠置換str_vector與相應df$repl匹配字符串df$pattern的元素。我在這個問題上閱讀了很多線索,但是,到目前爲止沒有任何工作。使用qdapstringrstringi回報:

> qdap::mgsub(df$pattern,df$repl,str_vector) 
[1] "111"   "1111112"  "1111113"  "4"    NA    
[6] "1111111111114" "7"    "8"    "9"    "1110" 

> stringr::str_replace(df$pattern,df$repl,str_vector) 
[1] "1" "2" "3" "5" "6" "1" "2" "3" "5" "6" 

> stringi::stri_replace_all_fixed(df$pattern,df$repl,str_vector,vectorize_all = TRUE) 
[1] "1" "2" "3" "5" "6" "1" "2" "3" "5" "6" 

任何幫助,將不勝感激。

非常感謝,非常感謝!


dfstr_vector繁殖:

df<-structure(list(pattern = c("1", "2", "3", "5", "6"), repl = c("111", 
"112", "113", "114", "115")), .Names = c("pattern", "repl"), row.names = c(NA, 
-5L), class = "data.frame") 

str_vector<-c("1", "2", "3", "4", NA, "6", "7", "8", "9", "10") 
+0

什麼是您預期的輸出? – akrun

+0

'str_vector'應該變爲'111 112 113 NA NA 115'。 –

回答

1

這裏是一個選項

v1 <- unname(setNames(df$repl, df$pattern)[str_vector]) 
i1 <- which(!is.na(v1)) 
v1[i1[1]:i1[length(i1)]] 
#[1] "111" "112" "113" NA NA "115"