1) strcapture Использование тестового входа, воспроизводимого в примечании в конце, может вызвать strcapture
из базы R:
pat <- "(q\\d)-(\\d{4})"
strcapture(pat, x, list(quarter = "", year = 0))
, давая:
quarter year
1 q4 2015
2 q2 2012
Альтернативой может быть столбец с числовым кварталом.В этом случае мы будем использовать pat <- "(\\d)-(\\d{4})"
и list(quarter = 0, year = 0)
.
2) read.pattern read.pattern
в пакете gsubfn можно использовать с тем же шаблоном.
library(gsubfn)
read.pattern(text = x, pattern = pat, col.names = c("quarter", "year"),
as.is = TRUE)
, что дает:
quarter year
1 q4 2015
2 q2 2012
2a) Другой подход заключается в использовании strapply
в gsubfn для создания объекта класса yearqtr
, а затем мы можем легко извлечь квартал и год или просто оставить его как объект yearmon:
library(gsubfn)
library(zoo)
ym <- do.call("c",
strapply(x, pat, q + y ~ as.yearqtr(paste(y, q, sep = "-"))))
ym
## [1] "2015 Q4" "2012 Q2"
data.frame(quarter = paste0("q", cycle(ym), year = as.integer(ym),
stringsAsFactors = FALSE)
## quarter year
## 1 q4 2015
## 2 q2 2012
Примечание
# test input
x <- c("aaaaa-ttttt-eeee-q4-2015-file",
"aaaaaa-fffff-3333-q2-2012-file")