Мы можем использовать data.table
методы
library(data.table)
setDT(df)[, mainmode := recode(mainmode, 'BS' = 'BUS',
'car' = 'car',
'active' = 'walk', 'TX' = 'taxi')][, choice := +(mode == mainmode)]
df
# mode choice mainmode
#1: taxi 0 BUS
#2: taxi 0 car
#3: taxi 0 walk
#4: taxi 1 taxi
или base R
, это можно сделать с именованным вектором
df$mainmode <- setNames(c('BUS', 'car', 'walk', 'taxi'),
c('BS', 'car', 'active', 'TX'))[as.character(df$mainmode)]
df$choice <- +(df$mode == df$mainmode)
data
df <- data.frame(mode=c("taxi", "taxi", "taxi", "taxi"), choice = c(1, 0, 0, 0),
mainmode = c("BS", "car", "active", "TX"), stringsAsFactors = FALSE)