Как добавить недели в столбец даты со столбцом, который является просто числом - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь вычислить дату окончания огромного фрейма данных на основе количества недель, которое потребуется для работы.

желаемый результат:

такойэто 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)))

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

Однострочник в базе 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
  • Ваша StartDate должна быть отформатирована как правильная дата,
    например, 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))
0 голосов
/ 14 декабря 2018

Кажется, в вашем примере есть опечатка?4 недели после 1 января 2019 года - это не 1 февраля 2019 года ...?

Если вы добавите n к объекту даты, вы получите новый объект даты через n дней.Поэтому я бы предложил:

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