2017-04-11 47 views
0

試圖編寫一行代碼,將一列數據幀中的字符串與引用字符串進行比較,如果匹配則替換爲普通單詞。例如,搜索列A並在列B中查找匹配項並用單詞'name'替換匹配的字符串在兩個不同的數據框中匹配字符串後用普通短語替換字符串R

想法?

例子:

v1 <- c("corey joe","joe", "emily", "joe") 
v2 <- c("corey", "emily") 

最終輸出應該是:

v1 = "name joe joe name joe" 

我用

ifelse(pmatch(v1, v2), 'name') 
NA NA name NA 

與部分成功,但它不會改變克里的名字,因爲谷歌也在那個字符串中。它也轉換喬到NA,我需要保持它喬

任何幫助將不勝感激 - 謝謝!

回答

1

您可以使用stringr的str_replace函數

library(stringr) 

value <- str_replace(v1,"corey|emily","name") 

> str_replace(v1,"corey|emily","name") 
[1] "name joe" "joe"  "name"  "joe" 

在你想要的一切成一個字符串,就可以在paste如下使用collapse選項的情況下:

> paste(value,collapse=" ") 
[1] "name joe joe name joe" 

如果你想使用來自BASE的gsub R

value <- gsub("corey|emily","name",v1) 

> gsub("corey|emily","name",v1) 
[1] "name joe" "joe"  "name"  "joe"  
> 
> paste(value,collapse=" ") 
[1] "name joe joe name joe" 

如果你想使用變量,那麼你可以使用paste0

str_replace(v1,paste0(v2[1],"|",v2[2]),"name") 

更確切地說:

str_replace(v1,paste0(v2[1:length(v2)],collapse="|"),"name") 

編輯註釋後: 我承認,所以一正如@Scarabee建議的那樣,增加了非常簡單的解決方案,即str_replace(v1,v2,"name")

> value <- str_replace(v1,paste0(v2,collapse="|"),"name") 
> final <- paste(value,collapse=" ") 
> final 
[1] "name joe joe name joe" 

結果將是相同的。