2017-02-22 19 views
0

У меня есть набор данные с датами в следующем формате:Даты форматирование MMM-YYYY

Начальный:

Jan-2015 Apr-2013 Jun-2014 Jan-2015 Jan-2016 Jan-2015 Jan-2016 Jan-2015 Apr-2012 Nov-2012 Jun-2013 Sep-2013 

Окончательные:

Feb-2014 Jan-2013 Sep-2014 Apr-2013 Sep-2014 Mar-2013 Aug-2012 Apr-2012 Oct-2012 Oct-2013 Jun-2014 Oct-2013 

Я хотел бы выполнить следующие действия:

  1. создать контрольные переменные для месяца и года
  2. Вычтите эти даты с другой даты, чтобы узнать продолжительность (final- инициалов) в месяцах

Я хотел бы сделать это в R?

ответ

1

Для этого можно использовать as.yearmon от пакета zoo.

library(zoo) 
12 * (as.yearmon("Jan-2015", "%b-%Y") - as.yearmon("Feb-2014", "%b-%Y")) 

# result 
# [1] 11 
2

Чтобы расширить @neilfws ответа, вы можете использовать month и year функции из lubridate пакета для создания фиктивного переменных с месяцем и годом в кадре данных.

Вот код:

library(lubridate) 
library(zoo) 
df <- data.frame(Initial = c("Jan-2015", "Apr-2013", "Jun-2014", "Jan-2015", "Jan-2016", "Jan-2015", 
         "Jan-2016", "Jan-2015", "Apr-2012", "Nov-2012", "Jun-2013", "Sep-2013"), 
      Final = c("Feb-2014", "Jan-2013", "Sep-2014", "Apr-2013", "Sep-2014", "Mar-2013", 
         "Aug-2012", "Apr-2012", "Oct-2012", "Oct-2013", "Jun-2014", "Oct-2013")) 

df$Initial <- as.character(df$Initial) 
df$Final <- as.character(df$Final) 
df$Initial <- as.yearmon(df$Initial, "%b-%Y") 
df$Final <- as.yearmon(df$Final, "%b-%Y") 
df$month_initial <- month(df$Initial) 
df$year_intial <- year(df$Initial) 
df$month_final <- month(df$Final) 
df$year_final <- year(df$Final) 

df$Difference <- 12*(df$Initial-df$Final) 

И вот окончательный data.frame:

> head(df) 
    Initial Final month_initial year_intial month_final year_final Difference 
1 Jan 2015 Feb 2014    1  2015   2  2014   11 
2 Apr 2013 Jan 2013    4  2013   1  2013   3 
3 Jun 2014 Sep 2014    6  2014   9  2014   -3 
4 Jan 2015 Apr 2013    1  2015   4  2013   21 
5 Jan 2016 Sep 2014    1  2016   9  2014   16 
6 Jan 2015 Mar 2013    1  2015   3  2013   22 

Надеется, что это помогает!