R 删除所有不符合';t匹配一组字符串并对列进行重新分类

R 删除所有不符合';t匹配一组字符串并对列进行重新分类,r,text-mining,data-cleaning,R,Text Mining,Data Cleaning,我从twitter API查询了一组社交媒体数据,其中还包括人们自我报告的位置。但是,位置字符串并不默认为分类的标准格式,有时还存在“trolls”值。这里有一个例子 a1 = data.frame(x=c(1:4),y=c("181 Metro Drive San Francisco", "Wall Street New York", "Austin, TX", "The Moon")) a1 我的计划是获取一个包含世界各地所有城市名称的CSV文件,并将其作为向量导入R,下面是一个小示例 a

我从twitter API查询了一组社交媒体数据,其中还包括人们自我报告的位置。但是,位置字符串并不默认为分类的标准格式,有时还存在“trolls”值。这里有一个例子

a1 = data.frame(x=c(1:4),y=c("181 Metro Drive San Francisco", "Wall Street New York", "Austin, TX", "The Moon"))
a1
我的计划是获取一个包含世界各地所有城市名称的CSV文件,并将其作为向量导入R,下面是一个小示例

a2 = c("New York", "Washington", "Austin")
a2
我想做的是编写一个R函数,它基于a2交叉引用a1,替换a1中所有在a2上没有显示为NA的字符串,并用精确的字符串值替换在a2上显示的所有字符串。例如,假设我们的函数是f,函数的输出如下

x = data.frame(x=c(1:4),c("San Francisco", "New York", "Austin", NA))
x

我可以为此在R中编写一个函数吗,或者是否有任何用于此任务的现有R包生成?感谢您的帮助

我们可以将所有城市名称粘贴为一个模式,然后使用
stru-extract
将其提取出来

library(stringr)

str_extract(a1, str_c(a2, collapse = "|"))
#[1] "San Francisco" "New York"      "Austin"        NA 
数据

a2 = c("New York", "Washington", "Austin", "San Francisco")
a1 = c("181 Metro Drive San Francisco", "Wall Street New York", 
       "Austin, TX", "The Moon")