Мне интересно знать, есть ли у кого-то более автоматизированное решение, потому что у меня часто бывают такие же беспорядочные данные.
Единственный способ, которым я знаю, как это сделать, - это кодирование набора регулярных выражений (через stringr::str_replace()
) для согласования строк в вашем фрейме данных. Вы можете использовать tidyr::separate()
, чтобы затем разбить ваш столбец product
на несколько столбцов:
library(stringr)
library(dplyr)
library(tidyr)
dat <- tibble(product = c("milk 1-liter low, fat",
"M I L K 1-liter L ow fat",
"Milk. 1_liter LOW FAT",
"Milk 1_liter L F A T",
"MILK 1.5_liter Hi gh FAT"))
dat %>%
mutate(product = str_replace(product, "(milk|MILK|Milk|M I L K|Milk)\\.*", "milk"),
product = str_replace(product, "(low|LOW|L\\sow|L),*", "low"),
product = str_replace(product, "(HIGH|Hi\\sgh|H)", "high"),
product = str_replace(product, "(FAT|Fat|F A T)", "fat"),
product = str_replace(product, "-liter", "_liter")) %>%
separate(product, into = c("V1", "V2", "V3", "V4"), sep = " ", extra = "merge")
# A tibble: 5 x 4
V1 V2 V3 V4
<chr> <chr> <chr> <chr>
1 milk 1_liter low fat
2 milk 1_liter low fat
3 milk 1_liter low fat
4 milk 1_liter low fat
5 milk 1.5_liter high fat