在数据框中比较年份月份并获取当前月份-1

时间:2019-09-24 08:22:53

标签: r date

在具有2个日期列的数据框中,如何比较月份年份并创建一个新变量?特别是,我想将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"))

我想要的结果是一个额外的列,如果dat1在sysdat月份的一个月之前显示1,而在所有其他情况下显示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 个答案:

答案 0 :(得分:1)

在基数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

lubridate中,我们可以使用yearmonth函数分别获取年份和月份。

library(lubridate)
df$x <- with(df, as.integer(year(dat1) == year(sysdat) & 
                (month(sysdat) - month(dat1) == 1))