如何使用只是数字的列将周添加到日期列

How to add weeks to a date column with a column that is just a number

我想做的是根据工作所需的周数计算一个巨大数据框的结束日期。

期望的结果:

这就是PO.Due.Date = 2019-01-01 Weeks duration = 4 (New Column) End Date = 2019-01-29

 $ Quote Number    : chr  "Q000297" "Q000300" "Q000401" "Q000405" ...
 $ Confidence.Level: num  0.1 0.1 0.1 0.1 0.1 0.6 0.2 0.2 0.6 0.1 ...
 $ PO.Due.Date     : Date, format: "2019-01-03" "2019-01-03" "2019-01-03" ...
 $ Duration.Weeks  : num  2 2 4 4 2 1 4 4 4 4 ...

mydf

   Quote Number Confidence.Level PO.Due.Date Duration.Weeks
1       Q000297             0.10  2019-01-03              2
2       Q000300             0.10  2019-01-03              2
3       Q000401             0.10  2019-01-03              4
4       Q000405             0.10  2019-01-03              4
5       Q000464             0.10  2019-01-03              2
6       Q000465             0.60  0028-02-20              1
7     Q000479/1             0.20  2019-03-01              4
8       Q000480             0.20  2019-03-01              4
9       Q000481             0.60  2019-02-28              4
10      Q000494             0.10  2019-01-03              4

虽然我可以把它分成几周和一年,然后添加它们。但是,这会弄乱我们正在寻找的详细日期的最终产品。

mydf$week <- format(mydf$PO.Due.Date, format="%Y-%U")

甚至有一个函数或类似的东西,但我无法得到它

mydf %>%
    mutate(PO.End.Date = colSums(PO.Due.Date + weeks(mydf$Duration.Weeks)))

你的例子好像有错字? 2019 年 1 月 1 日之后的 4 周不是 2019 年 2 月 1 日...?

如果您将 n 添加到日期对象,您将在 n 天后获得一个新的日期对象。所以我建议:

mydf$PO.End.Date<-mydf$PO.Due.Date+mydf$Duration.Weeks*7

基数 R 中的一行:

d$EndDate <- d$StartDate + 7 * d$DurationWeeks

> d
    StartDate DurationWeeks    EndDate
1  2019-01-03             2 2019-01-17
2  2019-01-03             2 2019-01-17
3  2019-01-03             4 2019-01-31
4  2019-01-03             4 2019-01-31
5  2019-01-03             2 2019-01-17
6  2019-02-20             1 2019-02-27
7  2019-03-01             4 2019-03-29
8  2019-03-01             4 2019-03-29
9  2019-02-28             4 2019-03-28
10 2019-01-03             4 2019-01-31
  • 您的开始日期需要格式化为正确的日期,
    例如,as.Date(d$StartDate, "%Y-%m-%d").

  • 数据应该是干净的。 0028-02-20(第 6 行)不是正确的日期。

数据

d <- structure(list(StartDate = structure(c(17899, 17899, 17899, 17899,  17899, 17947, 17956, 17956, 17955, 17899), class = "Date"), DurationWeeks = c(2L,  2L, 4L, 4L, 2L, 1L, 4L, 4L, 4L, 4L)), class = "data.frame", row.names = c(NA, -10L))