2017-10-19 6 views
0

I ont une colonne de chaînes qui ont des mois et des années répartis dans ses entrées:mois Rechercher et l'année dans la chaîne

df <- data.frame(STRINGS = c("January 2017 Blah Blah", 
         "February Blah Blah", 
         "2016 Yeah Yeah", 
         "March Bleck", 
         "Stuff")) 

> df 
       STRINGS 
1 January 2017 Blah Blah 
2  February Blah Blah 
3   2016 Yeah Yeah 
4   March Bleck 
5     Stuff 

Toutes les années vont de 2015 à 2017.

Je voudrais sortir le suivant:

    STRINGS   MONTH   YEAR 
1 January 2017 Blah Blah   January   2017 
2  February Blah Blah  February   NA 
3   2016 Yeah Yeah    NA   2016 
4   March Bleck   March   NA 
5     Stuff    NA   NA 

Quelle est la manière la plus facile de le faire?

Pour commencer, je

months <- c("January", "February", "March", "April", "May", "June", 
       "July", "August", "September", "October", "November", "December") 
years <- c(2015, 2016, 2017) 

Répondre

3

Une solution à l'aide dplyr, rebus et stringr. Notez qu'il suppose seulement 1 mois et une année correspondants par ligne.

library(dplyr) 
library(rebus) 
library(stringr) 

df2 <- df %>% 
    mutate(STRINGS = as.character(STRINGS)) %>% 
    mutate(MONTH = str_extract(STRINGS, or1(months)), 
     YEAR = str_extract(STRINGS, or1(years))) 
df2 
       STRINGS MONTH YEAR 
1 January 2017 Blah Blah January 2017 
2  February Blah Blah February <NA> 
3   2016 Yeah Yeah  <NA> 2016 
4   March Bleck March <NA> 
5     Stuff  <NA> <NA>