【问题标题】:R: subset matched wordsR:子集匹配词
【发布时间】:2014-04-23 10:34:21
【问题描述】:

这里,

a<-c("Look at the sky", "Sun is bright", "cloudy day")
b<-c("sky", "day")

我想根据ba 进行子集化。我的首选答案是:

"Look at the sky", "cloudy day"

如何在 R 中做到这一点?

【问题讨论】:

    标签: string r search subset


    【解决方案1】:

    选项 1

    您可以使用 sapply 将 a 与 b 中的所有术语匹配

    sapply(b, grepl, a)
    
           sky   day
    [1,]  TRUE FALSE
    [2,] FALSE FALSE
    [3,] FALSE  TRUE
    

    然后您折叠所有包含apply 和子集a 的行。

    a[apply(sapply(b, grepl, a), 1, any)]
    
    [1] "Look at the sky" "cloudy day"     
    

    选项 2

    创建一个组合的正则表达式模式

    paste(b, collapse="|")
    
    [1] "sky|day"
    

    然后用它grep

    a[grepl(paste(b, collapse="|"), a)]
    
    [1] "Look at the sky" "cloudy day"     
    

    【讨论】:

    • +1 - 不错的答案。我相信pattern &lt;- paste(b, collapse="|") 足以满足选项 2。无需将模式括在括号中。 grep 的另一种替代方法是:grep(pattern, a, value=T)
    【解决方案2】:

    尝试stringi 包中的字符串搜索工具:

    library(stringi)
    a[sapply(a, function(ae) any(stri_detect_fixed(ae, b)))]
    ## [1] "Look at the sky" "cloudy day"
    

    这里我们检测a中的每个字符串是否包含b中的任何字符串作为其子序列。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-15
      • 2016-10-18
      • 2015-09-16
      • 2023-03-05
      • 2016-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多