Я извлекаю значения веса (граммы и килограммы) и объема (миллилитры и литры) из грязного символьного столбца в кадре данных, но не могу исключить общий вес и объем.
Некоторые примеры данных выглядят так:
df <-
rbind(data.frame(text = "199-50 150g4_qty_+ 200g4_qty_"),
data.frame(text = "chouffe/ 330ml*2_qty_+ 330ml*2_qty_+ 330ml*2_qty_"),
data.frame(text = "1000g( 500g+ 500g) _qty_"),
data.frame(text = "(abbott) 900g+50g 2 950g"),
data.frame(text = "1kg 2kg 3kg 1kg +2kg"),
data.frame(text = "200ml*18_qty_ +putzi 50ml"),
data.frame(text = "( 250ml*6_qty_+ 250ml*4_qty_+ 190ml*6_qty_+ 200ml*4_qty_)"),
data.frame(text = "128g+ 128g+ 128g 384g"))
Посредством трала этого сайта и методом проб и ошибок я написал код, который извлекает нужные мне значения, а также некоторые из них, которые мне не нужны.
df1 <- regmatches(df$text, gregexpr("\\d+(ml|l|g|kg)", df$text))
df1 <- as.data.frame(t(sapply(df1, '[', seq(max(sapply(df1, length))))))
Я получаю:
V1 V2 V3 V4 V5
1 150g 200g NA NA NA
2 330ml 330ml 330ml NA NA
3 1000g 500g 500g NA NA
4 900g 50g 950g NA NA
5 1kg 2kg 3kg 1kg 2kg
6 200ml 50ml NA NA NA
7 250ml 250ml 190ml 200ml NA
8 128g 128g 128g 384g NA
, который в основном есть, но я хочу исключить лишние значения, такие как повторы (строка 5) и итоги (строки 3, 4 и 8). Конечный результат должен быть:
V1 V2 V3 V4
1 150g 200g NA NA
2 330ml 330ml 330ml NA
3 500g 500g NA NA
4 900g 50g NA NA
5 1kg 2kg NA NA
6 200ml 50ml NA NA
7 250ml 250ml 190ml 200ml
8 128g 128g 128g NA
Я определил, что между значениями, которые я хочу сохранить, должен быть +
. Например, строка 3 имеет +
между 500 г и 500 г, поэтому я хочу сохранить оба эти значения, но я не хочу сохранять 1000 г, поскольку между ними и 500 г нет +
. Точно так же, нет +
непосредственно перед 384g в строке 8.
Я просто не знаю, как использовать регулярные выражения для реализации этого, не поднимая +
слишком далеко.