我有一个数据框,我需要比较两列并查找两个元素之间的匹配字符数。
例如:x和y是要比较的两个元素,如下所示:
x<- "1/2"
y<-"2/3"
我确实未列出,并按'/'进行了拆分,如下所示:
unlist(strsplit(x,"/"))->a
unlist(strsplit(y,"/"))->b
然后我使用了pmatch:
pmatch(a,b,nomatch =0)
[1] 0 1
使用sum()知道要匹配多少个字符:
sum(pmatch(a,b,nomatch =0))
[1] 1
但是,当以另一种方式进行比较时:
pmatch(b,a,nomatch = 0)
[1] 2 0
由于两个字符串之间只有一个匹配项,为什么它显示2。它可能是索引。但是无论比较a与b还是b与a比较,我都需要获取字符串之间有多少个相同的字符。
有人可以帮忙得到这个吗?
答案 0 :(得分:0)
两者
sum(pmatch(b, a, nomatch = 0) != 0) # 1
sum(pmatch(a, b, nomatch = 0) != 0) # 1
返回相同的值。
答案 1 :(得分:0)
对于每个?pmatch
,pmatch
在其第二个参数中寻找其第一个参数的元素的匹配项。
例如,第一个列表中的“ 2”与第二个列表中的第二个元素匹配。
> pmatch(c("2", "1"),c("3","2"),nomatch =0)
# [1] 2 0
知道匹配的元素数量的一种方法是对非零元素求和:
sum(pmatch(c("2", "1"),c("3","2"),nomatch =0) != 0)
# [1] 1
答案 2 :(得分:0)
另一个选项可能是
sum(b %in% a)
[1] 1
sum(a %in% b)
[1] 1