r 日期与年月的交集

r intersect of date in with year and month

我想根据日期列找到两个数据框的交集。

以前,我一直在使用这个命令来查找年度日期列的交集(其中日期仅包含年份)

common_rows <-as.Date(intersect(df1$Date, df2$Date), origin = "1970-01-01")

但现在 df1 的日期列是日期类型,看起来像这样:

1985-01-01
1985-04-01
1985-07-01
1985-10-01

我的 df2 日期列也是日期类型,看起来像这样(注意日期不同)

1985-01-05
1985-04-03
1985-07-07
1985-10-01

当我保持这样的格式(即年、月和日)时,上面的命令工作正常,但由于我的日子不同,而且我对每月的交集感兴趣,所以我放弃了这样的日子,但这会产生和寻找路口时出错:

df1$Date <- format(as.Date(df1$Date), "%Y-%m")
common_rows <-as.Date(intersect(df1$Date, df2$Date), origin = "1970-01-01")
Error in charToDate(x) : 
character string is not in a standard unambiguous format

有没有办法在忽略日期的情况下,根据年和月找到两个数据集的交集?

试试这个:

date1 <- c('1985-01-01','1985-04-01','1985-07-01','1985-10-01')
date2 <- c('1985-01-05','1985-04-03','1985-07-07','1985-10-01')

# extract the part without date
date1 <- sapply(date1, function(j) substr(j, 1, 7))
date2 <- sapply(date2, function(j) substr(j, 1, 7))

print(intersect(date1, date2))
[1] "1985-01" "1985-04" "1985-07" "1985-10"

问题是 as.Date() 函数包装了您的最终输出。我不知道你是否可以将不完整的日期转换为日期对象。如果您对简单的字符串没问题,那么使用 common_rows <-intersect(df1$Date, df2$Date)。否则,尝试:

common_rows <-as.Date(paste(intersect(df1$Date, df2$Date),'-01',sep = ''), origin = "1970-01-01")