如何使用只是数字的列将周添加到日期列
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))
我想做的是根据工作所需的周数计算一个巨大数据框的结束日期。
期望的结果:
这就是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))