Is this what you mean?
library(tidyverse)
# Sample data on a copy/paste friendly format, replace with your actual data frame.
sample_df <- data.frame(
stringsAsFactors = FALSE,
Final.Test.Result = c(NA,"Discordant",
"HIV-1 Negative","HIV-1 Positive","HIV Negative",
"HIV Positive, undifferentiated","Inconclusive, further testing needed",
"Invalid","Negative","Positive","Preliminary positive"),
Count = c(328L,5L,88L,72L,5304L,1L,
30L,10L,37722L,110L,17L)
)
sample_df %>%
mutate(New_Final.Test.Result = case_when(
str_detect(Final.Test.Result, "[Pp]ositive") ~ "Positive",
str_detect(Final.Test.Result, "[Nn]egative") ~ "Negative",
str_detect(Final.Test.Result, "[Dd]iscordant") ~ "Discordant",
TRUE ~ "Invalid"
))
#> Final.Test.Result Count New_Final.Test.Result
#> 1 <NA> 328 Invalid
#> 2 Discordant 5 Discordant
#> 3 HIV-1 Negative 88 Negative
#> 4 HIV-1 Positive 72 Positive
#> 5 HIV Negative 5304 Negative
#> 6 HIV Positive, undifferentiated 1 Positive
#> 7 Inconclusive, further testing needed 30 Invalid
#> 8 Invalid 10 Invalid
#> 9 Negative 37722 Negative
#> 10 Positive 110 Positive
#> 11 Preliminary positive 17 Positive
Created on 2021-03-26 by the reprex package (v1.0.0.9002)