Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查短语列表中的任何单词是否包含在R中的列表中?_R_String_Match_Vectorization_String Matching - Fatal编程技术网

如何检查短语列表中的任何单词是否包含在R中的列表中?

如何检查短语列表中的任何单词是否包含在R中的列表中?,r,string,match,vectorization,string-matching,R,String,Match,Vectorization,String Matching,我有一个数据框,其中有一列名为listA,还有一列名为listB。我只想提取数据框中与listB中的条目匹配的行,因此我有: newData <- mydata[mydata$listA %in% listB,] 总是返回FALSE,可能是因为它检查strsplit返回的整个列表是否是listB中的一个条目 match(word\u vector,target\u vector)允许两个参数都是向量,这是您想要的(注意:这是向量,不是列表)。事实上,%操作符中的%是match()的同义词

我有一个数据框,其中有一列名为listA,还有一列名为listB。我只想提取数据框中与listB中的条目匹配的行,因此我有:

newData <- mydata[mydata$listA %in% listB,]
总是返回FALSE,可能是因为它检查strsplit返回的整个列表是否是listB中的一个条目

  • match(word\u vector,target\u vector)
    允许两个参数都是向量,这是您想要的(注意:这是向量,不是列表)。事实上,%操作符中的
    %是
    match()
    的同义词,它的帮助告诉您
  • 但是
    stringi
    package的方法
    stri\u match.*
    可以直接做你想做的事情,它们都是矢量化的,并且比
    match()
    strsplit()更有效:
    
    stri\u match\u all stri\u match\u regex stri\u match\u first stri\u regex stri\u match\u last stri\u match\u last\u regex
  • 此外,您可能不需要使用显式拆分函数,但如果必须使用,请使用
    stringi::stri_split_*()
    ,避免使用
    base::strsplit()


    性能注意事项:尽可能避免像R中的瘟疫那样拆分字符串,它会通过不必要的consccell创建内存泄漏,正如
    gc()
    所示。这也是
    stringi
    非常有效的另一个原因。

    您解决这个问题的尝试很不错,但您没有提供一个可复制的示例,也没有提供所需的输出。类似
    mydata[any(unlist(strsplit(strsplit)(mydata$listA,“/”)]
    ?谢谢Alex,这让我更接近了。现在的问题是,它对整个listA求值,而不是一次对一行求值。unlist(strsplit(mydata$listA,“//”)返回整个列表中的所有单词,因此any()始终返回TRUE。也许是某种应用函数……是的,我想那是因为
    未列出
    。另一种可能是签出
    grepl
    ,尽管它没有在模式参数上矢量化。这可能会使它过于复杂,但请尝试
    unlist(lapply(strsplit(mydata$listA,“/”),function(x)any(x%在%listB中))
    作为行子集条件。谢谢!这个软件包非常有用。
    strsplit(mydata$listA," ") %in% listB