df = structure(list(Combination = c("Animalborne_Archival", "Animalborne_Satellite_Archival",
"BRUV_Acoustic", "Stationary_Acoustic_Radio_PIT", "Stationary_Acoustic",
"Controlled_Archival"), new_var = c(Animalborne_Archival = "NoReceiver",
Animalborne_Satellite_Archival = "NoReceiver", BRUV_Acoustic = "Receiver",
Stationary_Acoustic_Radio_PIT = "Receiver", Stationary_Acoustic = "Receiver",
Controlled_Archival = "NoReceiver")), row.names = c(7L, 188L,
154L, 41L, 134L, 159L), class = "data.frame")
With base R (cf @MrFlick comment):
transform(df, newcol = paste0(sub("_.*", "", Combination), "_", new_var))
#> Combination new_var newcol
#> 7 Animalborne_Archival NoReceiver Animalborne_NoReceiver
#> 188 Animalborne_Satellite_Archival NoReceiver Animalborne_NoReceiver
#> 154 BRUV_Acoustic Receiver BRUV_Receiver
#> 41 Stationary_Acoustic_Radio_PIT Receiver Stationary_Receiver
#> 134 Stationary_Acoustic Receiver Stationary_Receiver
#> 159 Controlled_Archival NoReceiver Controlled_NoReceiver
With dplyr
(very similar):
library(dplyr)
mutate(df, newcol = paste0(sub("_.*", "", Combination), "_", new_var))
#> Combination new_var newcol
#> 7 Animalborne_Archival NoReceiver Animalborne_NoReceiver
#> 188 Animalborne_Satellite_Archival NoReceiver Animalborne_NoReceiver
#> 154 BRUV_Acoustic Receiver BRUV_Receiver
#> 41 Stationary_Acoustic_Radio_PIT Receiver Stationary_Receiver
#> 134 Stationary_Acoustic Receiver Stationary_Receiver
#> 159 Controlled_Archival NoReceiver Controlled_NoReceiver
With tidyr::unite()
:
library(tidyr)
df |>
mutate(tmp = sub("_.*", "", Combination)) |>
unite(tmp, new_var, col = newcol, sep = "_", remove = FALSE) |>
select(-tmp)
#> Combination newcol new_var
#> 7 Animalborne_Archival Animalborne_NoReceiver NoReceiver
#> 188 Animalborne_Satellite_Archival Animalborne_NoReceiver NoReceiver
#> 154 BRUV_Acoustic BRUV_Receiver Receiver
#> 41 Stationary_Acoustic_Radio_PIT Stationary_Receiver Receiver
#> 134 Stationary_Acoustic Stationary_Receiver Receiver
#> 159 Controlled_Archival Controlled_NoReceiver NoReceiver