我有两组数据,我试图在多个文件中找到相似的字符串。作为一个例子,我在这里展示了两个数据
df1<-structure(list(test = c("SNTM1", "STTTT2", "STOLA", "STOMQ",
"STR2", "SUPTY1", "TBNHSG", "TEYAH", "TMEIL1", "TMEIL2", "TMEIL3",
"TNIL", "TREUK", "TTRK", "TRRFK", "UBA52", "YIPF1")), class = "data.frame", row.names = c(NA,
-17L))
df2<- structure(list(test = c("SNTLK", "STTTFSG", "STOIU", "STOMQ",
"STR25", "SUPYHGS", "TBHYDG", "TEHDYG", "TMEIL1", "YIPF1")), class = "data.frame", row.names = c(NA,
-10L))
我发现类似这样的字符串
semi_join(df, df2, by="test")
甚至这个
match(df$test,df2$test)
或其他几种方法,我只是想不出有时它不起作用,可能是因为字符结构或大写小写,我一直在自杀,但它不匹配。列表很大,这就是为什么我不能在这里粘贴所有内容
我也尝试过的是
df1$test <- as.character(df1$test)
df2$test <- as.character(df2$test)
但我仍然无法弄清楚。任何想法?
回答1
试试 fuzzyjoin
:
我们可以加入 df1
df2
基于它们的列的模糊字符串匹配。
使用 max_dist 我们可以定义用于加入的最大距离
请参阅:?stringdist_left_join
library(dplyr)
library(fuzzyjoin)
fuzzyjoin::stringdist_left_join(x=df1, y=df2, max_dist =.35, by='test', method ='jaccard', distance_col = "dist")
test.x test.y dist
1 SNTM1 <NA> NA
2 STTTT2 <NA> NA
3 STOLA <NA> NA
4 STOMQ STOMQ 0.0000000
5 STR2 STR25 0.2000000
6 SUPTY1 <NA> NA
7 TBNHSG <NA> NA
8 TEYAH <NA> NA
9 TMEIL1 TMEIL1 0.0000000
10 TMEIL2 TMEIL1 0.2857143
11 TMEIL3 TMEIL1 0.2857143
12 TNIL <NA> NA
13 TREUK <NA> NA
14 TTRK <NA> NA
15 TRRFK <NA> NA
16 UBA52 <NA> NA
17 YIPF1 YIPF1 0.0000000