2016-02-29 3 views
3

Мне нужно извлечь год начала и конец года из вектора со значениями этого характера.Извлечение года из строковых и текстовых данных

yr<- c("June 2013 – Present (2 years 9 months)", "January 2012 – June 2013 (1 year 6 months)","2006 – Present (10 years)","2002 – 2006 (4 years)") 


yr 
June 2013 – Present (2 years 9 months) 
January 2012 – June 2013 (1 year 6 months) 
2006 – Present (10 years) 
2002 – 2006 (4 years) 

Ожидаемый результат как этот. У кого-нибудь есть предложения?

start_yr  end_yr 

2013   2016 
2012   2013 
2006   2016 
2002   2006 
+2

gsub "present" с 2016 и извлечь четыре цифры цифр. попробуйте – rawr

ответ

3
x <- gsub("present", "2016", yr, ignore.case = TRUE) 
x <- regmatches(x, gregexpr("\\d{4}", x)) 
start_yr <- sapply(x, "[[", 1) 
end_yr <- sapply(x, "[[", 2) 

это экономит начало и конечный год в 2 отдельных переменных, если вы хотите их в одном только изменить код и сделать Y $ start_yr Y $ end_yr

+0

У меня есть эта вещь под названием «character (0)», которая ползает и получает эту ошибку «Ошибка в FUN (X [[i]], ...): индекс за пределами границ». Любые предложения по удалению этих строк? – user3570187

0

Другим решением является использование stringr пакет

library(stringr) 
x <- str_replace(yr, "Present", 2016) 
DF <- as.data.frame(str_extract_all(x, "\\d{4}", simplify = T)) 
names(DF) <- c("start_yr", "end_yr") 
DF 

и вы получите

 start_yr end_yr 
1  2013 2016 
2  2012 2013 
3  2006 2016 
4  2002 2006 
Смежные вопросы