Я пытаюсь разделить довольно беспорядочный столбец на два столбца, содержащие период и описание. Мои данные похожи на выдержку ниже:
set.seed(1)
dta <- data.frame(indicator=c("someindicator2001", "someindicator2011",
"some text 20022008", "another indicator 2003"),
values = runif(n = 4))
Желаемые результаты
Желаемые результаты должны выглядеть так:
indicator period values
1 someindicator 2001 0.2655087
2 someindicator 2011 0.3721239
3 some text 20022008 0.5728534
4 another indicator 2003 0.9082078
Характеристики
- Описание индикаторов находится в одном столбце
- Числовые значения (отсчет от первой цифры с первой цифрой находятся во втором столбце)
Код
require(dplyr); require(tidyr); require(magrittr)
dta %<>%
separate(col = indicator, into = c("indicator", "period"),
sep = "^[^\\d]*(2+)", remove = TRUE)
Естественно, это не работает:
> head(dta, 2)
indicator period values
1 001 0.2655087
2 011 0.3721239
Другие попытки
- Я также попробовал метод разделения по умолчанию
sep = "[^[:alnum:]]"
, но он разбивает столбец на слишком много столбцов, поскольку он, похоже, соответствует всем доступным цифрам. -
sep = "2*"
также не работает, так как время от времени слишком много 2 (пример: 2 003 2 006).
То, что я пытаюсь сделать, сводится к:
- Идентификация первой цифры в строке
- Разделение на эту хартию. На самом деле, я был бы счастлив сохранить этот особый характер.