【问题标题】:r intersect of date in with year and monthr 日期与年月相交
【发布时间】:2018-02-27 09:38:42
【问题描述】:

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

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

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

有没有办法根据年份和月份找到两个数据集的交集,而忽略日期?

【问题讨论】:

  • 你期望什么输出?

标签: r date dataframe intersect


【解决方案1】:

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

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

【讨论】:

  • common_rows
【解决方案2】:

试试这个:

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"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-08
    • 2012-05-11
    • 2021-12-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多