r - dplyr:具有部分字符串匹配的inner_join

标签 r string join dplyr stringr

如果 seed,我想加入两个数据框数据框中的列 ystring 的部分匹配栏目x .这个例子应该说明:

# What I have
x <- data.frame(idX=1:3, string=c("Motorcycle", "TractorTrailer", "Sailboat"))
y <- data_frame(idY=letters[1:3], seed=c("ractor", "otorcy", "irplan"))


x

  idX         string
1   1     Motorcycle
2   2 TractorTrailer
3   3       Sailboat

y

Source: local data frame [3 x 2]

    idY   seed
  (chr)  (chr)
1     a ractor
2     b otorcy
3     c irplan


# What I want
want <- data.frame(idX=c(1,2), idY=c("b", "a"), string=c("Motorcycle", "TractorTrailer"), seed=c("otorcy", "ractor"))

want

  idX idY         string   seed
1   1   b     Motorcycle otorcy
2   2   a TractorTrailer ractor

也就是说,像
inner_join(x, y, by=stringr::str_detect(x$string, y$seed))

最佳答案

fuzzyjoin库有两个函数regex_inner_joinfuzzy_inner_join允许您匹配部分字符串:

x <- data.frame(idX=1:3, string=c("Motorcycle", "TractorTrailer", "Sailboat"))
y <- data.frame(idY=letters[1:3], seed=c("ractor", "otorcy", "irplan"))
x$string = as.character(x$string)
y$seed = as.character(y$seed)


library(fuzzyjoin)
x %>% regex_inner_join(y, by = c(string = "seed"))

  idX         string idY   seed
1   1     Motorcycle   b otorcy
2   2 TractorTrailer   a ractor


library(stringr)
x %>% fuzzy_inner_join(y, by = c("string" = "seed"), match_fun = str_detect)


  idX         string idY   seed
1   1     Motorcycle   b otorcy
2   2 TractorTrailer   a ractor

关于r - dplyr:具有部分字符串匹配的inner_join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32914357/

相关文章:

R:检测 "main"路径并使用内核删除或过滤GPS轨迹?

r - Windows 脚本宿主失败

ruby - 检查 ruby 中的字符长度

MySQL:逐年匹配列

r - 在 Shiny 的 rhandsontable 单元格中插入控制输入和 HTML 小部件

c - 如何修复c中的 'strtok destroy original string'

string - Haskell 中的 Data.Text 常量

php - 如何查看一个字段的重复条目,而只显示其他字段的一个条目?

sql-server - 使用 “not in”运算符转换子查询以加入

r - 如何按日期获取滞后变量的差异?