在R中跨字符向量查找匹配项

在R中跨字符向量查找匹配项,r,R,给定以下两个向量,是否有方法生成所需的数据帧?这代表了一个真实世界的情况,我必须对数据帧执行操作。第一个包含一个带有数据库值(键)的列,第二个包含1000多行的列,每个行都有我需要匹配的文件名(潜在值)。问题是可以有多个文件(潜在)匹配到任何给定的密钥。我曾与grep、merge、internaljoin等合作,但无法将它们合并到一个解决方案中。任何建议都将不胜感激 potentials我们可以编写一个小函数来提取匹配项,然后循环键: return_matches <- function(

给定以下两个向量,是否有方法生成所需的数据帧?这代表了一个真实世界的情况,我必须对数据帧执行操作。第一个包含一个带有数据库值(键)的列,第二个包含1000多行的列,每个行都有我需要匹配的文件名(潜在值)。问题是可以有多个文件(潜在)匹配到任何给定的密钥。我曾与grep、merge、internaljoin等合作,但无法将它们合并到一个解决方案中。任何建议都将不胜感激


potentials我们可以编写一个小函数来提取匹配项,然后循环键:

return_matches <- function(keys, potentials, fixed = TRUE) {
  vapply(keys, function(k) {
    paste(grep(k, potentials, value = TRUE, fixed = fixed), collapse = ", ")
  }, FUN.VALUE = character(1))
}

将循环放在函数中而不是直接运行它的原因只是为了让代码看起来更干净。

我们可以编写一个小函数来提取匹配项,然后循环键:

return_matches <- function(keys, potentials, fixed = TRUE) {
  vapply(keys, function(k) {
    paste(grep(k, potentials, value = TRUE, fixed = fixed), collapse = ", ")
  }, FUN.VALUE = character(1))
}

将循环放入函数而不是直接运行它的原因只是为了使代码看起来更干净。

您可以使用
grep

 > Match <- sapply(keys, function(item) {
                  paste0(grep(item, potentials, value = TRUE), collapse = ", ")
     } )     

> data.frame(keys, Match, row.names = NULL)
       keys                              Match
    1 tiger tigerINTHENIGHT, tigerWALKINGALONE
    2  bear               bearOHMY, bearWITHME
    3   rat                                rat
>匹配data.frame(键,匹配,行.名称=NULL)
钥匙匹配
1只老虎虎林夜,虎林孤行
2.熊熊我,熊熊和我
3大鼠

您可以使用
grep

 > Match <- sapply(keys, function(item) {
                  paste0(grep(item, potentials, value = TRUE), collapse = ", ")
     } )     

> data.frame(keys, Match, row.names = NULL)
       keys                              Match
    1 tiger tigerINTHENIGHT, tigerWALKINGALONE
    2  bear               bearOHMY, bearWITHME
    3   rat                                rat
>匹配data.frame(键,匹配,行.名称=NULL)
钥匙匹配
1只老虎虎林夜,虎林孤行
2.熊熊我,熊熊和我
3大鼠