首页 > 解决方案 > 按特定列值过滤日期

问题描述

我正在尝试从日历日数据框中过滤具有特定 offsetdate 值的日期。

数据框日历日:

calendardays <- as.data.frame(as.Date(seq(as.Date("2019-01-03"), as.Date("2022-12-31"), by="days")))
colnames(calendardays)<- c("Date")

DF2:

     LC    Custcode       Date      offsetdate
    RM11    IN007543    2019-10-03  2
    WK15    IN007543    2019-10-03  3

在 DF2 中,对于每一行都有一个 offsetdate,这意味着我想找到 x 号。DF2 中提到的日期的日期,对应于 Dataframe calendardays 中的 LC CustCode。

输出:

     LC    Custcode       Date      
    RM11    IN007543    2019-10-03
    RM11    IN007543    2019-10-04
    WK15    IN007543    2019-10-03
    WK15    IN007543    2019-10-04
    WK15    IN007543    2019-10-05  

标签: r

解决方案


使用 ix 展开 DF2,然后增加 Date 字段。不使用任何包。

ix <- rep(1:nrow(DF2), DF2$offsetdate) # 1,1,2,2,2
DF2rep <- transform(DF2[ix, ], Date = Date + sequence(DF2$offsetdate) - 1)[-4]

这已经给出了问题中显示的输出,但是如果您需要检查日期是否也出现在 calendardays 中,这只会在 DF2rep 中保留也在 calendardays 中的日期。

DF2rep[DF2rep$Date %in% calendardays$Date, ]

笔记

假设可重现形式的 DF2 为:

Lines <- "     LC    Custcode       Date      offsetdate
    RM11    IN007543    2019-10-03  2
    WK15    IN007543    2019-10-03  3"
DF2 <- read.table(text = Lines, header = TRUE)
DF2$Date <- as.Date(DF2$Date)

推荐阅读