2017-07-31 105 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"