Сравнить годовой месяц во фрейме данных и получить текущий месяц -1 - PullRequest
0 голосов
/ 24 сентября 2019

Как можно сравнить год с месяцем и создать новую переменную во фрейме данных с двумя столбцами даты?В частности, я хотел бы сравнить dat1 с sysdat и проверить, находится ли dat1 в месяце, предшествующем месяцу sysdat.

df <- data.frame(dat1 = as.Date(c("2019-01-01","2019-02-15","2019-08-23","2019-09-12")),
             sysdat = as.Date(c("2019-09-24","2019-09-24","2019-09-24","2019-09-24"))

В результате я хотел бы получить дополнительный столбец, отображающий 1, если dat1 равен одному месяцу.до месяца sysdat и 0 во всех остальных случаях.Таким образом, в приведенном ниже примере это будет только строка 3.

dat1     sysdat x
1 2019-01-01 2019-09-24 0
2 2019-02-15 2019-09-24 0
3 2019-08-23 2019-09-24 1
4 2019-09-12 2019-09-24 0

1 Ответ

1 голос
/ 24 сентября 2019

В базе R мы можем извлечь год и месяц из столбцов, используя format и вернуть 1, если годы совпадают, а разница между месяцами равна 1.

df$x <- with(df, as.integer(format(dat1, "%Y") == format(sysdat, "%Y") & 
      (as.integer(format(sysdat, "%m")) - as.integer(format(dat1, "%m")) == 1)))

df
#        dat1     sysdat x
#1 2019-01-01 2019-09-24 0
#2 2019-02-15 2019-09-24 0
#3 2019-08-23 2019-09-24 1
#4 2019-09-12 2019-09-24 0

In lubridate, мы можем использовать функции year и month, чтобы получить год и месяц соответственно.

library(lubridate)
df$x <- with(df, as.integer(year(dat1) == year(sysdat) & 
                (month(sysdat) - month(dat1) == 1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...