2017-05-14 123 views
2

我試圖刪除數據框的一個字符串元素中存在的'+'字符。但我無法找到解決辦法。如何用R中的gsub()函數替換'+'

以下是數據框。

txtdf <- structure(list(ID = 1:9, Var1 = structure(c(1L, 1L, 1L, 1L, 4L, 
      5L, 5L, 2L, 3L), .Label = c("government", "parliament", "parliment", 
      "poli+tician", "politician"), class = "factor")), .Names = c("ID", 
      "Var1"), class = "data.frame", row.names = c(NA, -9L)) 
# ID Var1 
# 1 government 
# 2 government 
# 3 government 
# 4 government 
# 5 poli+tician 
# 6 politician 
# 7 politician 
# 8 parliament 
# 9 parliment 

我嘗試了兩種方式,他們都沒有給出預期的結果:

WAY1

txtdf <- gsub("[:punct:]","", txtdf) 
# [1] "goverme" "goverme" "goverme" "goverme" "oli+iia" "oliiia" "oliiia" 
# [8] "arliame" "arlime" 

我不明白什麼是錯在這裏。我希望單獨第5個元素的'+'字符被替換爲沒有值,但是所有元素都如上編輯。

Way2

txtdf<-gsub("*//+","",txtdf) 
# [1] "government" "government" "government" "government" "poli+tician" 
# [6] "politician" "politician" "parliament" "parliment" 

在這裏有根本沒有變化。我想我嘗試過的是,我試圖用雙斜槓來逃避+角色。

+0

逸出使用'做'\\。 – Rahul

+0

或者把它放在一個字符類中:'「[+]」'。由於'+'(1或更多)在字符類中沒有特殊含義,因此不需要轉義。 – LukStorms

+2

或使用'fixed'參數:'gsub(「+」,「」,txtdf $ varname,fixed = TRUE)' – user2957945

回答

0

只需使用fixed = TRUE(不需要使用正則表達式)替換它,但你必須通過指定列名做更換爲每個data.frame的「列」:

txtdf <- data.frame(job = c("government", "poli+tician", "parliament")) 
txtdf 

  job 
1 government 
2 poli+tician 
3 parliament 

現在更換 「+」:

txtdf$job <- gsub("+", "", txtdf$job, fixed = TRUE) 
txtdf 

結果:

  job 
1 government 
2 politician 
3 parliament 
+0

爲了讓你的正則表達式成爲固定表達式,另一個參數是「fixed = TRUE」,這是一個新的學習!謝謝 –

1

你需要逃避你加號​​「+」具有特殊的含義(它是一個量詞),當涉及到正則表達式,因此不能被視爲一個標點符號,從技術文檔:?regex

「+」前一項將匹配一次或多次。

要匹配這些特殊字符,您需要將這些特殊字符轉義,以便可以從字面上理解它們的含義,因此它們的特殊含義不會被翻譯。在R中,你需要兩個反斜槓(\)才能逃脫。所以你的情況,這將是這樣的:

gsub("\\+","",df$job) 

上面跑會給你從你的數據刪除所有加符號所期望的結果。

所以假設你的df是:

df <- data.frame(job = c("government", "poli+tician","politician", "parliament")) 

那麼你的輸出將是:

> gsub("\\+","",df$job) 
[1] "government" "politician" "politician" 
[4] "parliament" 
+0

反斜槓轉義字符完美工作!謝謝!! –