Представьте себе data.table
вот так
library(data.table)
DT = data.table(values=c('call', NA, 'letter', 'call', 'e-mail', 'phone'))
print(DT)
values
1: call
2: <NA>
3: letter
4: call
5: e-mail
6: phone
Я хочу перекодировать значения следующим отображением
mappings = list(
'by_phone' = c('call', 'phone'),
'by_web' = c('e-mail', 'web-meeting')
)
То есть я хочу преобразовать call
в by_phone
и т.д. NA
должен быть установлен в missing
, а неизвестный (согласно предоставленному отображению) - в other
.Для этой конкретной таблицы данных я мог бы просто решить мою проблему следующим образом:
recode_group <- function(values, mappings){
ifelse(values %in% unlist(mappings[1]), names(mappings)[1],
ifelse(values %in% unlist(mappings[2]), names(mappings)[2],
ifelse(is.na(values), 'missing', 'other')
)
)
}
DT[, recoded_group:=recode_group(values, mappings)]
print(DT)
values recoded_group
1: call by_phone
2: <NA> missing
3: letter other
4: call by_phone
5: e-mail by_web
6: phone by_phone
Но я ищу эффективную и общую функциональность recode_group
.Есть предложения?