簡體   English   中英

在 R 中查找和替換文本

[英]Finding and replacing text in R

最近,我開始學習 R 並嘗試通過自動化過程來探索更多。 下面是示例數據,我正在嘗試通過查找和替換標簽中的特定文本來創建一個新列 (colname:Designations)。

因為,我正在使用大量新數據進行這項工作,我想使用 R 編程而不是使用 excel 公式來自動化。

數據集:

strings<-c("Zonal Manager","Department Manager","Network Manager","Head of Sales","Account Manager","Alliance Manager","Additional Manager","Senior Vice President","General manager","Senior Analyst", "Solution Architect","AGM")

我使用的 R 代碼:

t<-data.frame(strings,stringsAsFactors = FALSE)
colnames(t)[1]<-"Designations"
y<-sub(".*Manager*","Manager",strings,ignore.case = TRUE)

挑戰:
在此,所有數據都作為經理進行了更改,但我需要用主要主題替換其他名稱。

我嘗試使用 ifelse 語句、grep、grepl、str、sub 等,但沒有得到我想要的

我不能使用第一個/第二個/最后一個詞(作為“分隔”),因為主要主題來回分散。例如:首席信息官或商業財務經理或 AGM

優秀作品:
我已經將 300 個主要主題編碼為...

經理(適用於所有 GM、Asst.Manager、銷售經理等) 架構師(Solution Arch、Sr. Arch 等) Director(Senior Director、Director、Asst.Director 等) 高級分析師 分析師 Head(針對銷售負責人)

我在尋找什么:我需要創建一個新列,並且應該用相關的主題替換文本,就像我在 excel 中使用 R 所做的那樣。

如果我可以使用我已經在 excel 中編碼的主題來匹配使用 R 編程的主題(如 excel 中的 vlookup),我就可以了。

預期結果:在此處輸入圖像描述 在此先感謝您的幫助!

是的,和我期待的完全一樣。 謝謝!! 但是當我通過上傳新數據集(excel文件)並使用相同的方法嘗試相同的方法時

df %>% 
   mutate(theme=gsub(".*(Manager|Lead|Director|Head|Administrator|Executive|Executive|VP|President|Consultant|CFO|CTO|CEO|CMO|CDO|CIO|COO|Cheif Executive Officer|Chief Technological Officer|Chief Digital Officer|Chief Financial Officer|Chief Marketing Officer|Chief Digital Officer|Chief Information Officer,Chief Operations Officer)).*","\\1",Designations,ignore.case = TRUE))

它沒有用。 我應該在其他地方更正嗎?

數據:

strings<-c("Zonal Manager","Department Manager","Network Manager","Head of Sales","Account Manager",
           "Alliance Manager","Additional Manager","Senior Vice President","General manager","Senior Analyst", "Solution Architect","AGM")

你需要准備一個好的查找表:(你完成它並使它完美。)

lu_table <- data.frame(new = c("Manager", "Architect","Director"), old = c("Manager|GM","Architect|Arch","Director"), stringsAsFactors = F)

然后你可以讓 mapply 來完成這項工作:

mapply(function(new,old) {ans <- strings; ans[grepl(old,ans)]<-new; strings <<- ans; return(NULL)}, new = lu_table$new, old = lu_table$old)

現在看看strings

> strings
 [1] "Manager"               "Manager"               "Manager"               "Head of Sales"         "Manager"               "Manager"              
 [7] "Manager"               "Senior Vice President" "General manager"       "Senior Analyst"        "Architect"             "Manager" 

請注意:

此解決方案使用<<- 所以這可能不是最好的解決方案。 但在這種情況下有效。

你的意思是這樣的嗎?

library(dplyr)
strings <-
  c(
    "Zonal Manager",
    "Department Manager",
    "Network Manager",
    "Head of Sales",
    "Account Manager",
    "Alliance Manager",
    "Additional Manager",
    "Senior Vice President",
    "General manager",
    "Senior Analyst",
    "Solution Architect",
    "AGM"
  )

df = data.frame(Designations = strings)


df %>%
  mutate(
    theme = gsub(
      ".*(manager|head|analyst|architect|agm|director|president).*",
      "\\1",
      Designations,
      ignore.case = TRUE
    )
  )
#>             Designations     theme
#> 1          Zonal Manager   Manager
#> 2     Department Manager   Manager
#> 3        Network Manager   Manager
#> 4          Head of Sales      Head
#> 5        Account Manager   Manager
#> 6       Alliance Manager   Manager
#> 7     Additional Manager   Manager
#> 8  Senior Vice President President
#> 9        General manager   manager
#> 10        Senior Analyst   Analyst
#> 11    Solution Architect Architect
#> 12                   AGM       AGM

reprex 包(v0.2.1) 於 2018 年 10 月 4 日創建

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM