Проблемы с Str_Extract - PullRequest
       13

Проблемы с Str_Extract

0 голосов
/ 24 июня 2019

У меня есть список цветов, которые я пытаюсь извлечь из образца набора данных. Кажется, пропустить одни цвета и найти другие.

color_list <- c("gray", "brown", "green", "plum", "mist", "forest", "sienna", "grape", "ruby", "emerald", "copper", 
                "silver", "gold", "blue")
str_extract(df, fixed(color_list, ignore_case = TRUE))
[1] "GRAY"   NA       NA       NA       NA       NA       NA       NA       NA       NA       NA       "silver" "GOLD"   "blue"  

Все же первый матч должен быть "серебряным".

Пример данных:

structure(list(df = c("Tsilver flash mirror", "E:~ ADD FLASH FRONT MI", 
"E:~", "E##T Color: G 15#3; MC", "E:~ ## PLEASE USE 8 BA", "E:~ ## blue flash ##", 
"E:~ ## Silver Mirror #", "Ssilver mirror", "E:~ ## Treatment: Fee-", 
"E:~Further Instruction", "E:~ ## FORREST GRAY Xp", "ESILVER", 
"EGOLD")), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13"))

И возможно ли сделать "нечеткое" сопоставление с Str_Extract? Так как в данных есть некоторые орфографические ошибки.

1 Ответ

1 голос
/ 24 июня 2019

Следующий код выведет кадр данных со столбцом для извлеченного. Я вставил функцию tolower (), чтобы изменить пример на все строчные. Если вы хотите «нечеткое» соответствие, вы можете посмотреть на регулярные выражения. https://stringr.tidyverse.org/articles/regular-expressions.html

 example <- structure(list(df = c("Tsilver flash mirror", "E:~ ADD FLASH FRONT MI", 
"E:~", "E##T Color: G 15#3; MC", "E:~ ## PLEASE USE 8 BA", "E:~ ## blue flash ##", 
"E:~ ## Silver Mirror #", "Ssilver mirror", "E:~ ## Treatment: Fee-", 
"E:~Further Instruction", "E:~ ## FORREST GRAY Xp", "ESILVER", 
"EGOLD")), class = "data.frame", row.names = c("1", "2", "3", 
"4", "5", "6", "7", "8", "9", "10", "11", "12", "13"))

color_list <- c("gray", "brown", "green", "plum", "mist", "forest", "sienna", "grape", "ruby", "emerald", "copper", 
                "silver", "gold", "blue")

example %>% 
  mutate(extract = str_extract(tolower(df), paste(color_list, collapse = "|")))
...