I'm trying to separate a rather messy column into two columns containing period and description. My data resembles the extract below:
set.seed(1)
dta <- data.frame(indicator=c("someindicator2001", "someindicator2011",
                              "some text 20022008", "another indicator 2003"),
                  values = runif(n = 4))
Desired results
Desired results should look like that:
          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
Characteristics
- Indicator descriptions are in one column
 - Numeric values (counting from first digit with the first digit are in the second column)
 
Code
require(dplyr); require(tidyr); require(magrittr)
dta %<>%
  separate(col = indicator, into = c("indicator", "period"),
           sep = "^[^\\d]*(2+)", remove = TRUE)
Naturally this does not work:
> head(dta, 2)
  indicator period    values
1              001 0.2655087
2              011 0.3721239
Other attempts
- I have also tried the default separation method 
sep = "[^[:alnum:]]"but it breaks down the column into too many columns as it appears to be matching all of the available digits. - The 
sep = "2*"also doesn't work as there are too many 2s at times (example: 20032006). 
What I'm trying to do boils down to:
- Identifying the first digit in the string
 - Separating on that charter. As a matter of fact, I would be happy to preserve that particular character as well.