Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.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 - Fatal编程技术网

R:在字符串向量中查找多个字符串匹配项

R:在字符串向量中查找多个字符串匹配项,r,R,我有以下文件名列表: files.list <- c("Fasted DWeib NoCmaxW.xlsx", "Fed DWeib NoCmaxW.xlsx", "Fasted SWeib NoCmaxW.xlsx", "Fed SWeib NoCmaxW.xlsx", "Fasted DWeib Cmax10.xlsx", "Fed DWeib Cmax10.xlsx", "Fasted SWeib Cmax10.xlsx", "Fed SWeib Cmax10.xlsx") 然而,

我有以下文件名列表:

files.list <- c("Fasted DWeib NoCmaxW.xlsx", "Fed DWeib NoCmaxW.xlsx", "Fasted SWeib NoCmaxW.xlsx", "Fed SWeib NoCmaxW.xlsx", "Fasted DWeib Cmax10.xlsx", "Fed DWeib Cmax10.xlsx", "Fasted SWeib Cmax10.xlsx", "Fed SWeib Cmax10.xlsx")
然而,这返回了四种可能性:

[1] "Fasted DWeib NoCmaxW.xlsx" "Fed DWeib NoCmaxW.xlsx"    "Fasted SWeib NoCmaxW.xlsx"
[4] "Fasted DWeib Cmax10.xlsx"  "Fasted SWeib Cmax10.xlsx" 
我想要包含toMatch两个元素(即“Fasted”和“DWeib NoCmaxW”)的文件名。只有一个文件满足该要求(files.list[1])。我假设粘贴命令中的“|”可能是逻辑OR,因此我尝试了“&”,但这并没有解决我的问题

有人能帮忙吗


谢谢。

我们可以使用
&

i1 <- grepl(toMatch[1], files.list) & grepl(toMatch[2], files.list)
i1 <- Reduce(`&`, lapply(toMatch, grepl, x = files.list))
files.list[i1]
#[1] "Fasted DWeib NoCmaxW.xlsx"

也可以使用
*
折叠元素,即匹配“toMatch”的第一个单词,然后是单词边界(
\\b
),然后是一些字符(
*
)和另一个单词边界(
\\b
),然后是第二个单词“toMatch”。在本例中,它是有效的。可能最好在开头和结尾添加单词边界(本例中不需要)

i1 <- grepl(toMatch[1], files.list) & grepl(toMatch[2], files.list)
i1 <- Reduce(`&`, lapply(toMatch, grepl, x = files.list))
files.list[i1]
#[1] "Fasted DWeib NoCmaxW.xlsx"
pat1 <- paste(toMatch, collapse= "\\b.*\\b")
grep(pat1, files.list, value = TRUE)
#[1] "Fasted DWeib NoCmaxW.xlsx"
pat2 <- paste(rev(toMatch), collapse="\\b.*\\b")
pat <- paste(pat1, pat2, sep="|")
grep(pat, files.list, value = TRUE) 
#[1] "Fasted DWeib NoCmaxW.xlsx"