假设我有一个excel文件,我已经将其作为数据帧读取并加载到R中。其中一列是包含一个或多个单词的文本列。我必须找出一个单元格是否包含在";City_Vector";(例如c("New York", "Beijing", "Paris", "London")
并提取它(或提取第一个匹配/所有匹配(。在Excel中,我使用了一个用户定义的函数,得到了这样的smth:
| For Moscow State University |
应返回Moscow
;| asdsadsadsaWarsawsdaqq |
应返回Warsaw
我试图将字符串拆分并使用%in%
,但这似乎不是最好的解决方案。非常感谢。
如果目标是提取匹配项而不考虑情况,那么这应该有效:
数据:
City_Vector <- c("New York", "Bejing", "Paris", "London", "Moscow", "Warsaw")
cities <- c('Moscow State University','asdsadsadsaWarsawsdaqq',
'New York Philhamonics', 'food in Bejing', 'parisclimateaccord')
解决方案:
library(stringr)
str_extract(cities, paste0("(?i)(", paste0(City_Vector, collapse = "|"), ")"))
说明:
这里的重点是使用嵌套的paste0
命令将所有可能的城市名称公式化为备选模式(注意备选标记|
(。
编辑:
(?i)
用于使模式不区分大小写。
使用stringr
包中的str_extract()
。
过于简单的例子:
cityVec <- c('Moscow State University','asdsadsadsaWarsawsdaqq')
str_extract(cityVec, 'Moscow')