是否有任何 R 函数或脚本来交换以下选择集数据中的选择值?

Is there any R function or scripts to interchange the choice value in the following choice set data?

数据集:mode=c(taxi, taxi, taxi, taxi), choice = c(1, 0, 0, 0), mainmode = c(BS, car, active, TX)

此处观察到的真实行程是来自列名"mode"的出租车。然后我需要根据 "mainmode" 列信息更改为第 1 行第 0 列和第 4 行第 1 列中的值,其中 BS= BUS,car = car,active= walk,TX = taxi。

假设您的数据在数据框 df 中,您需要创建一个查找 table,然后查找要从主模式转换为模式的值。然后匹配模式。

modelookup=data.frame(mode=c("bus","car","walk","taxi"),main=c("BS","car","active","TX"))
df$lookup = modelookup$mode[match(df$mainmode, modelookup$main)]
df$choice = as.numeric(df$mode==df$lookup)

modemainmode 没有相同的术语,因此无法比较它们。更改 modemainmode,然后很容易直接比较它们。

library(dplyr)

df %>%
   mutate(mainmode = recode(mainmode, 'BS' = 'BUS', 'car' = 'car', 
                            'active' = 'walk', 'TX' = 'taxi'), 
          choice = as.integer(mode == mainmode))


#  mode choice mainmode
#1 taxi      0      BUS
#2 taxi      0      car
#3 taxi      0     walk
#4 taxi      1     taxi

数据

df <- data.frame(mode=c("taxi", "taxi", "taxi", "taxi"), choice = c(1, 0, 0, 0),
           mainmode = c("BS", "car", "active", "TX"), stringsAsFactors = FALSE)

我们可以使用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)
数据
df <- data.frame(mode=c("taxi", "taxi", "taxi", "taxi"), choice = c(1, 0, 0, 0),
       mainmode = c("BS", "car", "active", "TX"), stringsAsFactors = FALSE)