Мне не удалось адаптировать это решение для группировки вектора по регулярным выражениям для нескольких групп, и я не могу понять, что я делаю неправильно. Другое решение мне тоже не помогло.
x1 <- gsub(paste0("(^a?A?pr)|(^a?A?ug)|(d?D?ec)"),
"\\1 \\2 \\3", x)
> unique(x1)
[1] " dec" "Apr " " aug " "apr " " Dec" " Aug "
Я ожидал три уникальные группы, как я их определил в gsub
, то есть просто что-то вроде "dec Dec", "aug Aug", "apr Apr"
.
С более чем 9 группами это еще хуже.
y1 <- gsub(paste0("(^a?A?pr)|(^a?A?ug)|(d?D?ec)|(^f?F?eb)|(^j?J?an)|(^j?J?ul)|",
"(^j?J?un)|(^m?M?ar)|(^m?M?ay)|(^n?|N?ov)|(^o?O?ct)|(^s?S?ep)"),
"\\1 \\2 \\3 \\4 \\5 \\6 \\7 \\8 \\9 \\10 \\11 \\12", y)
> unique(y1)
[1] " 0 1 2" " jun 0 1 2"
[3] " jul 0 1 2" " Aug 0 1 2"
[5] " Jul 0 1 2" " feb 0 1 2"
[7] " Jun 0 1 2" " Mar 0 1 2"
[9] " jan 0 1 2" "Apr Apr0 Apr1 Apr2"
[11] " dec 0 1 2" " Feb 0 1 2"
[13] " Dec 0 1 2" "apr apr0 apr1 apr2"
[15] " aug 0 1 2"
В качестве конечного результата я стремлюсь к факторизованному вектору с уникальными уровнями для разных появлений одного и того же типа (т.е. в этом примере группадля каждого названия месяца, без учета регистра).
Изменить
Мое приложение имеет меньшее отношение к названиям месяцев и только верхний / нижнийслучай, мои группы более сложны.Данные генерируются OCR и поэтому слегка уничтожены.Я пытаюсь привести другой пример, который должен проиллюстрировать мою проблему:
z1 <- gsub(paste0("(^0?O?c?i?t)|(^5?S?ep?P?)|(^D?d?8?o?e?c?o?)|(^a?A?p.)|",
"(^A?u.)|(F?f?E?e?b)|(^J?I?ul|ju1)|(J?j?u?2?n?2?)|(^N.+)|(^May)"),
"\\1 \\2 \\3 \\4 \\5 \\6 \\7 \\8 \\9 \\10", z)
> unique(z1)
[1] "Oit Oit0" " ju2 0" "0ct 0ct0" " ju1 0"
[5] " Au9 0" " Iul 0" " Sep 0" " Jul 0"
[9] " feb 0" " Jun 0" "Oct Oct0" " 8oc 0"
[13] " Eeb 0" " Nov 0" " Feb 0" " deo 0"
[17] " Apv 0" " Dec 0" " j2n 0" " 0"
[21] " apr 0" " Aug 0" " 5eP 0"
Различные формы названий месяцев не относятся к тем группам, которые я определил в регулярном выражении gsub
.Кроме того, имена групп с более чем одной цифрой, например \\10
, создают проблемы (сравните с регистром x
).
Как правильно сделать gsub
, чтобы мои группы, определенные в регулярном выражении, распознавались однозначно?
Данные
x <- c("dec", "Apr", "dec", "aug", "dec", "dec", "Apr", "apr", "apr",
"dec", "Dec", "Aug", "Aug", "Apr", "Aug", "Apr", "aug", "Apr",
"apr", "Apr", "dec", "aug", "aug", "aug", "aug", "apr", "dec",
"Aug", "dec", "dec", "Dec", "Dec", "Apr", "Apr", "dec", "dec",
"Dec", "dec", "apr", "Apr", "Apr", "dec", "apr", "apr", "apr",
"apr", "Aug", "apr", "dec", "dec")
y <- c("Oct", "jun", "oct", "jul", "Aug", "jul", "Sep", "Jul", "feb",
"feb", "Jun", "Mar", "jan", "Apr", "jul", "oct", "Jun", "jan",
"Jun", "Oct", "Jul", "dec", "Jun", "Sep", "Feb", "Nov", "Feb",
"dec", "Apr", "Dec", "jan", "Aug", "Feb", "apr", "Sep", "Nov",
"aug", "oct", "Jun", "jul", "Apr", "Jun", "Apr", "Dec", "Jun",
"Jul", "Aug", "Aug", "Jul", "sep")
z <- c("Oit", "ju2", "0ct", "ju1", "Au9", "Iul", "Sep", "Jul", "feb",
"Jun", "Oct", "Jul", "8oc", "Jun", "Sep", "Eeb", "Nov", "Feb",
"deo", "Apv", "Dec", "j2n", "May", "Feb", "apr", "Sep", "Nov",
"Jul", "Aug", "Aug", "Jul", "5eP")