Использование dplyr
и grepl
df=data.frame(a=c("ABC-1562","ABC-1562"),
b=c("ABC-1563; ABC-1562; ABC-9892","ABC-1563; ABC-1564; ABC-9892"),
stringsAsFactors = FALSE)
> df%>%rowwise()%>%mutate(res=if_else(grepl(a,b),TRUE,FALSE))
Source: local data frame [2 x 3]
Groups: <by row>
# A tibble: 2 x 3
a b res
<chr> <chr> <lgl>
1 ABC-1562 ABC-1563; ABC-1562; ABC-9892 TRUE
2 ABC-1563 ABC-1563; ABC-1564; ABC-9892 FALSE
РЕДАКТИРОВАТЬ
Насколько я понимаю, у вас есть два df, такие как:
> df1=data.frame(id=c(3,2,5),prod_code=c("ABC-1562","ABC-1562","ABC-1563"),
+ stringsAsFactors = FALSE)
> df1
id prod_code
1 3 ABC-1562
2 2 ABC-1562
3 5 ABC-1563
> df2=data.frame(id=c(5,2,1),family_code=c("ABC-1563; ABC-1562; ABC-9892","ABC-1563; ABC-1564; ABC-9892",
+ "ABC-1561; ABC-1564; ABC-989"),
+ stringsAsFactors = FALSE)
> df2
id family_code
1 5 ABC-1563; ABC-1562; ABC-9892
2 2 ABC-1563; ABC-1564; ABC-9892
3 1 ABC-1561; ABC-1564; ABC-989
Мы можем сделать left_join
для сопоставления prod
и family
на id
.Затем используйте ifelse
с тем же условием, что и раньше, чтобы увидеть, есть ли совпадение.
> df=left_join(df1,df2,by="id")%>%rowwise()%>%
+ mutate(res=if_else(grepl(prod_code,family_code),
+ TRUE,FALSE))
> df
Source: local data frame [3 x 4]
Groups: <by row>
# A tibble: 3 x 4
id prod_code family_code res
<dbl> <chr> <chr> <lgl>
1 3 ABC-1562 NA FALSE
2 2 ABC-1562 ABC-1563; ABC-1564; ABC-9892 FALSE
3 5 ABC-1563 ABC-1563; ABC-1562; ABC-9892 TRUE
Таким образом, вы также можете увидеть, есть ли id
без совпадения