假设我有一个数据框:
df <- data.frame(a=c("m,dt,f,m","dt,t,d,e","m,t,e,x", "m,x,dt,f"))
我想搜索包含&#34; m&#34;的行。 &安培; &#34; DT&#34;在字符串中。也就是说,&#34; m&#34; &安培; &#34; DT&#34;需要出席。所以在上面的数据框架中,第1行和第4行符合条件,但不满足2或3 - 但它们都包含&#34; m&#34;或&#34; dt&#34;。一旦我找到它们,我想用另一个字符串替换它们,比如说&#34; John&#34;。
所以,df [1,1]等于&#34; John,f,m&#34;甚至&#34; John&#34; (那会更好)。
我一直在使用stringr包但似乎无法弄清楚如何获得条件&#34; m&#34; &安培; &#34; DT&#34;坚持。仅供参考 - 我正在做以下变种:
b <- a$a %>% str_replace_all("dt|m","John")
目前我有&#34;或&#34;条件,但我需要弄清楚&#34;和&#34;条件。
有什么想法吗?
答案 0 :(得分:1)
使用前瞻的完整示例:
library("stringr")
df <- data.frame(a=c("m,dt,f,m","dt,t,d,e","m,t,e,x", "m,x,dt,f"), stringsAsFactors = FALSE)
df$a[str_detect(df$a, "(?=.*\\bm\\b)(?=.*\\bdt\\b)")] = "John"
df
这使用了两个pos。每个网站上分别带有m
和dt
以及“边界”的前瞻。
(?=.*\bm\b) # looking for m with "boundaries
(?=.*\bdt\b) # looking for dt with "boundaries"