【问题标题】:Match two lists, one with partial strings and another with full string, return the whole string if match匹配两个列表,一个带有部分字符串,另一个带有完整字符串,如果匹配则返回整个字符串
【发布时间】:2016-01-19 23:42:58
【问题描述】:

匹配 R 中的两个列表,一个带有部分字符串,另一个带有完整字符串,如果匹配则返回整个字符串。仅返回唯一匹配项(一次)。

假设我有一个 CSV 文件,并且每一行都有一个长字符串(长列表)。然后,我使用 substr 缩短字符串,然后使用 unique 删除所有重复的字符串。然后我想比较长字符串列表df12和唯一短列表df14,如果部分字符串搜索有唯一匹配(df14 vs df12),然后从df12返回整个字符串.

这是df12(长字符串列表)

    [1] I like stackoverflow very much today
    [2] I like stackoverflow much today
    [3] I dont like stackoverflow very much today
    [4] I dont like you!
    [5] What? 

df13<-substr(df12, start=0, stop=30)

这是df13(缩短的字符串 - 不唯一)

[1] I like stacko
[2] I like stacko
[3] I dont like s
[4] I dont like y
[5] What? 
df14<-unique(df13)

这是df14(缩短的字符串 - 应用唯一方法后的唯一字符串)

    [1] I like stacko
    [2] I dont like s
    [3] I dont like y
    [4] What? 

这是我最终想要的结果

    [1] I like stackoverflow very much today
    [2] I dont like stackoverflow very much today
    [3] I dont like you!
    [4] What?

【问题讨论】:

  • df13&lt;-substr(df12, start=0, stop=30) 不会为我产生预期的输出。应该是df13&lt;-substr(df12, start=0, stop=13)?

标签: regex r string match substr


【解决方案1】:

这是一种将 df14 中的每个短字符串与 df12 中所有可能的匹配项进行匹配并输出它们的方法,包括将短字符串作为列表中的索引,以了解哪个与 df12 中的匹配项匹配:

df1 <- c('I like stackoverflow very much today', 'I like stackoverflow much today',
         'I dont like stackoverflow very much today', 'I dont like you!',
         'What?')
df2 <- c('I like stacko',  'I dont like s', 'I dont like y', 'What?')

sapply(df2, function(x) df1[grepl(x, df1)])
$`I like stacko`
[1] "I like stackoverflow very much today" "I like stackoverflow much today"     

$`I dont like s`
[1] "I dont like stackoverflow very much today"

$`I dont like y`
[1] "I dont like you!"

$`What?`
[1] "What?"

【讨论】:

  • 我收到一条错误消息,上面写着" invalid regular expression, reason 'Missing ')"... 然后在您非常优雅的解决方案中添加了"sapply(df2, function(x) df1[grepl(x, df1, fixed=TRUE)])" 我想知道,如果有多个匹配项,有没有办法获得最长的匹配项短字符串列表中的一个唯一字符串是否存在匹配项?
  • 您可以获取上述sapply 命令的输出,将其保存到名为l 的名称中,假设您可以运行此命令来获取每个短字符串的最长匹配长字符串: lapply(l, function(x) x[nchar(x) == max(nchar(x))])
  • 谢谢@user3949008!这很有帮助!
猜你喜欢
  • 2019-12-12
  • 2013-08-16
  • 2021-07-11
  • 1970-01-01
  • 2020-09-04
  • 1970-01-01
  • 2016-11-29
  • 2023-03-08
  • 1970-01-01
相关资源
最近更新 更多