Замените несколько операторов if else в R на встроенные функции при создании нового столбца в кадре данных - PullRequest
1 голос
/ 05 марта 2019

У меня есть фрейм данных, содержащий длинные и конкретные названия заправок (~ Name). Моя цель - создать новую колонку, в которой эти длинные имена будут классифицированы по нескольким основным брендам на основе ключевых слов, встречающихся в названии (~ Brand). Я знаю, что одним из способов является использование нескольких операторов if else, но с большим количеством ключевых слов код будет очень запутанным. Так есть ли способ добиться этого с помощью некоторых функций из пакетов tidyverse или любым другим способом, опуская операторы if else?

library(tibble)

df <- tribble(~Name,
             "POLSKI KONCERN NAFTOWY ORLEN SPÓŁKA AKCYJNA (STACJA NR 538)",
             "BP EUROPA SE SPÓŁKA EUROPEJSKA ODDZIAŁ W POLSCE",
             "LOTOS PALIWA SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ",
             "STACJA PALIW VIP",
             "POLSKI KONCERN NAFTOWY ORLEN SPÓŁKA AKCYJNA (STACJA NR 125)",
             "POLSKI KONCERN NAFTOWY ORLEN SPÓŁKA AKCYJNA (STACJA NR 168)",
             "STACJA PALIW E. KOKOSZKO, BOLESŁAWIEC",
             "SHELL POLSKA SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ (STACJA NR 5023)",
             "LOTOS PALIWA SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ (NR 201)",
             "TESCO POLSKA SP. Z O.O.")

main_gas_stations <- c("ORLEN", "BP", "LOTOS", "SHELL")

df_final <- tribble(~Name,~Brand,
                    "POLSKI KONCERN NAFTOWY ORLEN SPÓŁKA AKCYJNA (STACJA NR 538)","ORLEN",
                    "BP EUROPA SE SPÓŁKA EUROPEJSKA ODDZIAŁ W POLSCE","BP",
                    "LOTOS PALIWA SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ","LOTOS",
                    "STACJA PALIW VIP",NA,
                    "POLSKI KONCERN NAFTOWY ORLEN SPÓŁKA AKCYJNA (STACJA NR 125)","ORLEN",
                    "POLSKI KONCERN NAFTOWY ORLEN SPÓŁKA AKCYJNA (STACJA NR 168)","ORLEN",
                    "STACJA PALIW E. KOKOSZKO, BOLESŁAWIEC",NA,
                    "SHELL POLSKA SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ (STACJA NR 5023)","SHELL",
                    "LOTOS PALIWA SPÓŁKA Z OGRANICZONĄ ODPOWIEDZIALNOŚCIĄ (NR 201)","LOTOS",
                    "TESCO POLSKA SP. Z O.O.",NA)

1 Ответ

0 голосов
/ 05 марта 2019

Один из вариантов: paste main_gas_stations с помощью | (OR) и извлечь слово с помощью str_extract

library(stringr)
library(dplyr)
df %>%
   mutate(Brand = str_extract(Name, paste(main_gas_stations, collapse="|")))
...