是否有任何 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)
mode
和 mainmode
没有相同的术语,因此无法比较它们。更改 mode
或 mainmode
,然后很容易直接比较它们。
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)
数据集: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)
mode
和 mainmode
没有相同的术语,因此无法比较它们。更改 mode
或 mainmode
,然后很容易直接比较它们。
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)