R:使用查找表替换数据帧中的子字符串

时间:2017-11-09 15:00:55

标签: r text-mining

我有一个包含一系列字符串的数据框,其中一些字符串包含两个单词的短语,我想将其压缩为单个"伪词"。

在这个例子中,"联合王国","沙特阿拉伯","欧洲联盟"是我感兴趣的短语。我想替换" 联合王国"的所有实例。与" unitedkingdom "," 沙特阿拉伯"与" saudiarabia "等等。

我的文本字符串数据框如下:

text.df <- as.data.frame(
c(
  "Lorem ipsum dolor sit saudi arabia adipiscing elit.", # Contains "saudi arabia"
  "Ut enim ad minim veniam united kingdom exercitation.", # Contains "united kingdom"
  "Excepteur sint european union deserunt saudi arabia laborum", # Contains "european union" and "saudi arabia"
  "Sed ut perspiciatis unde omnis error sit voluptate." # Contains nothing of interest
 ))
colnames(text.df) <- 'content'

我的查询数据框如下:

lookup <- data.frame(matrix(ncol = 2, nrow = 3))
lookup$X1 <- c('united kingdom', 'european union', 'saudi arabia')
lookup$X2 <- c('unitedkingdom', 'europeanunion', 'saudiarabia')

我的目标是返回一个如下所示的数据框:

> new.text.df
                                                    content
1        Lorem ipsum dolor sit saudiarabia adipiscing elit.
2       Ut enim ad minim veniam unitedkingdom exercitation.
3 Excepteur sint europeanunion deserunt saudiarabia laborum
4       Sed ut perspiciatis unde omnis error sit voluptate.
> 

如果有人能够提供帮助,将不胜感激!提前谢谢。

2 个答案:

答案 0 :(得分:3)

withEnv(['HOME=.']) {
... 
...
}

答案 1 :(得分:1)

你可以试试这个:

library(stringr)
transform_word <- function(text){
 for (i in 1:nrow(lookup))
  text <- stringr::str_replace_all(text,lookup$X1[i],lookup$X2[i])
 return(text)
}

text.df[,'content'] <- sapply(text.df[,'content'],transform_word)