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")
我想根据日期列找到两个数据框的交集。
以前,我一直在使用这个命令来查找年度日期列的交集(其中日期仅包含年份)
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")