Я пытаюсь улучшить свою игру на R, и мне явно нужно какое-то руководство.Я хочу создать много переменных (93, если быть точным), но я хочу сделать это умным способом.Но я застрял.
Моя проблема: фрейм данных (df), содержащий некоторые переменные, включая "основную", которая содержит основы моей переменной описания.Другой фрейм данных (ссылка), более справочная таблица, содержащая два столбца - категорию и регулярное выражение, необходимые для ее идентификации;Я сохранил только 3 записи, но изначально их 93.
Код:
library(tidyverse)
df <- tibble("FlawType" = c(rep("Medium", 5), rep("Major", 5)),
"Description" = c("utilizaca indev equip final divers daquel justific aquisica",
"utilizaca modal indev licitac aquisica mater previst plan trabalh conveni nomd",
"aquisica indev lanch gener alimentici secret municip educaca mont r",
"uso indev recurs bloc atenca basic aquisica medic realizaca trat intim prefeit decisa judic",
"indici irregular favorec process licitato no aquisica medic farmac basic raza concentraca indevid empr certam",
"localizaca bem vist realiz equip fiscalizaca cgu escol municip abril municipi palestin par",
"telecentr inat ausenc equip local instalaca equip defeit",
"equip local",
"equip mater permanent adquir implantaca banc aliment send utiliz outr local simples encontr in loc realiz equip",
"mater equip gener alimentici adquir recurs cra por entreg local atend"))
reference <- tibble(var = c("Aquisição indevida", "Equipamentos não localizados", "Despesa irregular"),
regex = c("(aquisica.*indev|indev.*aquisica)", "(equip.*local|local.*equip)", "(desp.*irregul|irregul.*desp)"))
I kinda может создать три новые переменные в моем примере df, но получаетсябыть списком, и я должен извлечь его.Я думал, что это не будет проблемой, но когда я пытаюсь запустить его с моим оригинальным df (60k + строк), он застревает ...
Идея такова: использовать ссылку $ var в качестве именикаждая новая переменная, используя связанное регулярное выражение (ссылка $ regex) для создания фиктивной переменной для каждой записи в ссылке.
Код, который работает в образце , но не в исходном df , простодля справки:
varnames <- unique(reference$var)
for(varname in varnames){
fd[[varname]] <- df %>%
mutate(!!paste0(varname) := ifelse(str_detect(df$Description, reference$regex), 1, 0))
}
df <- bind_cols(df, map_df(fd,3))
Заранее спасибо.