在具有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
答案 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
中,我们可以使用year
和month
函数分别获取年份和月份。
library(lubridate)
df$x <- with(df, as.integer(year(dat1) == year(sysdat) &
(month(sysdat) - month(dat1) == 1))