You can try a base R solution with apply():
#Base R
df$Var <- apply(df,1,function(x) length(which(!is.na(x) & x %in% c('A','B'))))
Output:
  COL1 COL2 COL3 Var
A    A    B <NA>   2
B    B    B    C   2
C <NA> <NA> <NA>   0
D    B    B    B   3
E <NA> <NA>    C   0
F    A    A    C   2
Some data used:
#Data
df <- structure(list(COL1 = c("A", "B", NA, "B", NA, "A"), COL2 = c("B", 
"B", NA, "B", NA, "A"), COL3 = c(NA, "C", NA, "B", "C", "C")), row.names = c("A", 
"B", "C", "D", "E", "F"), class = "data.frame")
Or if you feel curious about tidyverse:
library(tidyverse)
#Code
df %>% mutate(id=1:n()) %>%
  left_join(df %>% mutate(id=1:n()) %>%
  pivot_longer(cols = -id) %>%
  filter(value %in% c('A','B')) %>%
  group_by(id) %>%
  summarise(Var=n())) %>% ungroup() %>%
  replace(is.na(.),0) %>% select(-id)
Output:
  COL1 COL2 COL3 Var
1    A    B    0   2
2    B    B    C   2
3    0    0    0   0
4    B    B    B   3
5    0    0    C   0
6    A    A    C   2