Here is one method.
DF <- data.frame(Subject = c("1a","1b","2a","2b"), B = c("t", "5", "n", "6"),
Gender = c("m", "m", "m", "m"))
DF
Subject B Gender
1 1a t m
2 1b 5 m
3 2a n m
4 2b 6 m
library(tidyr)
library(dplyr)
DF %>% separate(col = Subject, into = c("Number", "Letter"), sep = -1) %>%
pivot_wider(names_from = "Letter", values_from = "B") %>%
unite("B", a, b, sep= "-") %>%
mutate(Number = paste0(Number, "a-b"))
# A tibble: 2 x 3
Number Gender B
<chr> <chr> <chr>
1 1a-b m t-5
2 2a-b m n-6