繁体   English   中英

r与年和月的日期相交

[英]r intersect of date in with year and month

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

以前,我一直使用此命令来查找年日期列的相交(其中日期仅包含年份)

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

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

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

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

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

有没有一种方法可以根据年份和月份查找两个数据集的交集,而忽略日期?

问题是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")

尝试这个:

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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM