Вы можете использовать dplyr::if_else()
, как я изучил , это строгое, потому что он проверяет тип данных и обрабатывает NA, делая код проще:
df %>% mutate(Result = if_else( Team==Winner, "Winner", "Loser", missing ='No result'))
Team Winner Result
1 T1 T1 Winner
2 T2 T1 Loser
3 T2 <NA> No result
4 T3 <NA> No result
Несмотря наЕсли посмотреть на решение с одной строкой, для вашего примера это не самое быстрое (победитель - ответ @Tim Biegeleisen, +1):
Unit: microseconds
expr min lq mean median uq max neval cld
IF_ELSE 893.013 974.5060 1176.35331 1053.2260 1343.3590 2278.398 100 b
IFELSE 20.481 34.3475 49.57934 47.3605 58.0275 143.361 100 a
CASE 1067.946 1152.4255 1423.41426 1226.0255 1721.3850 4108.795 100 c
Так что я могу выяснитькомпромисс между простотой (это, конечно, субъективно) и большим контролем (это объективно, из-за характера функций) и скоростью (если это проблема для вас, поиск ваших реальных данных, но это более объективно).