Home > front end >  Using a condition related to a part of word in r
Using a condition related to a part of word in r

Time:05-18

I have a dataframe like this:

1                      2 
aquiles_alcatra_Mat_15 picanha
aquiles_alcatra_Mat_15 picanha
alcatra_Mat_15         picanha
alcatra_Mat_20         picanha
alcatra_Mat_25         picanha
picanha_Mat_20         picanha
picanha_Mat_25         picanha

and I would like to do this:

1                      2 
aquiles_alcatra_Mat_15 alcatra
aquiles_alcatra_Mat_15 alcatra
alcatra_Mat_15         alcatra
alcatra_Mat_20         alcatra
alcatra_Mat_25         alcatra
picanha_Mat_20         picanha
picanha_Mat_25         picanha

If I have alcatra as a part of the word on column 1 I will just want alcatra on column 2.

I know I can use this:

file$2[ file$1 == 'aquiles_alcatra_Mat_15'] <- 'alcatra'

but I have several situations almost 300. And I tried something like this:

file$2[ file$1 == '.*alcatra*'] <- 'alcatra'

But did'nt work.

CodePudding user response:

A possible solution, based on dplyr and stringr::str_detect:

library(tidyverse)

df %>% 
  mutate(V2 = if_else(str_detect(V1, "alcatra"), "alcatra", V2))

#>                       V1      V2
#> 1 aquiles_alcatra_Mat_15 alcatra
#> 2 aquiles_alcatra_Mat_15 alcatra
#> 3         alcatra_Mat_15 alcatra
#> 4         alcatra_Mat_20 alcatra
#> 5         alcatra_Mat_25 alcatra
#> 6         picanha_Mat_20 picanha
#> 7         picanha_Mat_25 picanha

CodePudding user response:

You can use the following code:

library(dplyr)
df %>%
  mutate(v2 = case_when(grepl("alcatra", v1) ~ "alcatra",
                        grepl("picanha", v1) ~ "picanha"))

Output:

                      v1      v2
1 aquiles_alcatra_Mat_15 alcatra
2 aquiles_alcatra_Mat_15 alcatra
3         alcatra_Mat_15 alcatra
4         alcatra_Mat_20 alcatra
5         alcatra_Mat_25 alcatra
6         picanha_Mat_20 picanha
7         picanha_Mat_25 picanha

Data

df <- data.frame(v1 = c("aquiles_alcatra_Mat_15", "aquiles_alcatra_Mat_15", "alcatra_Mat_15", "alcatra_Mat_20", "alcatra_Mat_25", "picanha_Mat_20", "picanha_Mat_25"),
                 v2 = c("picanha", "picanha", "picanha", "picanha", "picanha", "picanha", "picanha"))
  • Related