我遇到了部分字符串匹配的问题。我有一对人,我需要比较他们的名字。为此,我对两个姓氏进行了两个方向的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
答案 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"