R部分字符串匹配忽略全向空格

时间:2018-09-27 20:37:14

标签: r string pattern-matching string-matching

我遇到了部分字符串匹配的问题。我有一对人,我需要比较他们的名字。为此,我对两个姓氏进行了两个方向的charmatch运算,以查看name1是否为name2的一部分,反之亦然。我下面有一个小的数据集来演示这个问题。我在下面使用charmatch;我也使用了pmatch,它返回相同的结果。

当charmatch说搜索匹配其第二个参数中的第一个参数元素的搜索... 时,我认为这意味着它将把element1中的每个字符组视为一个模式n看看element2中是否存在相同的组。但这显然不是正在发生的事情,它看起来是特定于方向的。

那么...这是特定方向的吗?如果是的话...我还能用什么做我正在描述的事情?我打算使用的EG名字双关语,实际上我遇到的是很多姓,丈夫有他的名字,妻子有她的+丈夫。我需要确定丈夫的姓氏中是否存在丈夫的姓氏。

我知道可以用正则表达式来完成,但是我对它们不熟悉,也许应该,但是事实并非如此,因此我更喜欢不使用正则表达式的答案。

eg_data <- data.frame(name1 = c('Jimmy Conway', 'Jimmy'), 
name2 = c('Conway','Jimmy Conway'))

eg_data$share_name1 <- mapply(charmatch, eg_data$name1, eg_data$name2)
eg_data$share_name2 <- mapply(charmatch, eg_data$name2, eg_data$name1)
eg_data$share_name <- 0
eg_data$share_name [(eg_data$share_name1==1 | eg_data$share_name2==1)] 
<- 1

2 个答案:

答案 0 :(得分:0)

相同的两行,仅字符串检测,而不是charmatch。

eg_data$share_name1 <- mapply(str_detect,eg_data$name1, eg_data$name2)
eg_data$share_name2 <- mapply(str_detect,eg_data$name2, eg_data$name1)

或什至

eg_data$share_name1 <- ifelse(mapply(str_detect,eg_data$name1, eg_data$name2)==TRUE,1,0)
eg_data$share_name2 <- ifelse(mapply(str_detect,eg_data$name2, eg_data$name1)==TRUE,1,0)

感谢任何看过的人。我希望这对其他人有帮助。

答案 1 :(得分:0)

这可能有用

> with(eg_data, intersect(name1, name2))
[1] "Jimmy Conway"