如果我有一个字符串向量:
dd <- c("sflxgrbfg_sprd_2011","sflxgrbfg_sprd2_2011","sflxgrbfg_sprd_2012")
想要找到2011年&#39;&#39;在我可以使用的字符串中
ifiles <- dd[grep("2011",dd)]
如何在不使用循环的情况下搜索包含字符串组合的条目?
例如,我想找到同时包含&#39; 2011&#39;和&#39; sprd&#39;在字符串中,在这种情况下只返回
sflxgrbfg_sprd_2011
如何做到这一点?我可以定义一个变量
toMatch <- c('2011','sprd)
然后循环访问条目,但我希望有更好的解决方案?
注意:使其对不同的字符串有用。是否也可以确定哪些条目具有这些字符串而不显示它们。例如,&#39; sflxlgrbfg_2011_sprd&#39;
答案 0 :(得分:3)
如果要查找多个模式,请尝试使用逻辑值而不是数字进行索引。这样你就可以创建一个&#34;和&#34;条件,其中只提取具有两种模式的字符串。
ifiles <- dd[grepl("2011",dd) & grepl("sprd_",dd)]
答案 1 :(得分:2)
尝试
grep('2011_sprd|sprd_2011', dd, value=TRUE)
#[1] "sflxgrbfg_sprd_2011" "sflxlgrbfg_2011_sprd"
或使用包含更多模式的示例
grep('(?<=sprd_).*(?=2011)|(?<=2011_).*(?=sprd)', dd1,
value=TRUE, perl=TRUE)
#[1] "sflxgrbfg_sprd_2011" "sflxlgrbfg_2011_sprd"
#[3] "sfxl_2011_14334_sprd" "sprd_124334xsff_2011_1423"
dd <- c("sflxgrbfg_sprd_2011","sflxgrbfg_sprd2_2011","sflxgrbfg_sprd_2012",
"sflxlgrbfg_2011_sprd")
dd1 <- c(dd, "sfxl_2011_14334_sprd", "sprd_124334xsff_2011_1423")
答案 2 :(得分:0)
如果您想要一个可扩展的解决方案,可以使用lapply
,Reduce
和intersect
来:
toMatch
中的每个表达式,找到dd
中所有匹配项的索引。toMatch
中的所有表达式找到的索引。dd <- c("sflxgrbfg_sprd_2011","sflxgrbfg_sprd2_2011","sflxgrbfg_sprd_2012")
dd <- c(dd, "sflxgrbfh_sprd_2011")
toMatch <- c('bfg', '2011','sprd')
dd[Reduce(intersect, lapply(toMatch, grep, dd))]
#> [1] "sflxgrbfg_sprd_2011" "sflxgrbfg_sprd2_2011"
由reprex package(v0.2.0)创建于2018-03-07。