Most probably, this is not what you are looking for, but it works:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
sample_data <- tribble(~name, ~col1, ~col2, ~col3,
"John", "cricket", "football", "basketball",
"Scottish", "running", "football", NA,
"Kobe", NA, NA, "basketball",
"jordan", "baseball", "basketball", NA,
"shakira", "singing", "dancing", "acting",
"Chris", NA, NA, NA,
"Tendulkar", "cricket", NA, NA,
"Axl", "basketball", "guitar", "cricket")
User_list <- tibble(vars = c("basketball", "football", "cricket"))
sample_data %>%
mutate(Tag = apply(X = .,
MARGIN = 1,
FUN = function(t) {
case_when(((t[2] %in% User_list$vars) & (!(any(t[-(1:2)] %in% User_list$vars)))) ~ 1,
(!(t[2] %in% User_list$vars) & (any(t[-(1:2)] %in% User_list$vars))) ~ 2,
((t[2] %in% User_list$vars) & (any(t[-(1:2)] %in% User_list$vars))) ~ 3)
}))
#> # A tibble: 8 x 5
#> name col1 col2 col3 Tag
#> <chr> <chr> <chr> <chr> <dbl>
#> 1 John cricket football basketball 3
#> 2 Scottish running football <NA> 2
#> 3 Kobe <NA> <NA> basketball 2
#> 4 jordan baseball basketball <NA> 2
#> 5 shakira singing dancing acting NA
#> 6 Chris <NA> <NA> <NA> NA
#> 7 Tendulkar cricket <NA> <NA> 1
#> 8 Axl basketball guitar cricket 3
Adding another solution:
library(dplyr)
#>
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#>
#> filter, lag
#> The following objects are masked from 'package:base':
#>
#> intersect, setdiff, setequal, union
library(purrr)
sample_data <- tribble(~name, ~col1, ~col2, ~col3,
"John", "cricket", "football", "basketball",
"Scottish", "running", "football", NA,
"Kobe", NA, NA, "basketball",
"jordan", "baseball", "basketball", NA,
"shakira", "singing", "dancing", "acting",
"Chris", NA, NA, NA,
"Tendulkar", "cricket", NA, NA,
"Axl", "basketball", "guitar", "cricket")
User_list <- tibble(vars = c("basketball", "football", "cricket"))
temp <- function(t)
{
case_when(((t[2] %in% User_list$vars) & (!(any(t[-(1:2)] %in% User_list$vars)))) ~ 1L,
(!(t[2] %in% User_list$vars) & (any(t[-(1:2)] %in% User_list$vars))) ~ 2L,
((t[2] %in% User_list$vars) & (any(t[-(1:2)] %in% User_list$vars))) ~ 3L)
}
sample_data %>%
mutate(Tag = pmap_int(.l = .,
.f = lift_vd(temp)))
#> # A tibble: 8 x 5
#> name col1 col2 col3 Tag
#> <chr> <chr> <chr> <chr> <int>
#> 1 John cricket football basketball 3
#> 2 Scottish running football <NA> 2
#> 3 Kobe <NA> <NA> basketball 2
#> 4 jordan baseball basketball <NA> 2
#> 5 shakira singing dancing acting NA
#> 6 Chris <NA> <NA> <NA> NA
#> 7 Tendulkar cricket <NA> <NA> 1
#> 8 Axl basketball guitar cricket 3