R - Проблема: Mutate не создает новый столбец - PullRequest
2 голосов
/ 27 мая 2020

У меня есть фрейм данных с двумя переменными: ID и Дата доставки. Я собираюсь сгруппировать фрейм данных по идентификатору, а затем добавить один месяц + i к дате доставки, где «i» будет n-м появлением того же идентификатора. Пример:

ID   Date.Delivery   New.Date
001   2020-01-01    2020-02-01 (+1 month)
001   2020-01-01    2020-03-01 (+2 months, as there is a 2nd occurence of the same ID)
002   2020-01-01    2020-02-01 (+1 month, as this is the first occurence of a new ID)

Чтобы добиться этого, я пробую этот код:

DF <- DF %>%
      group_by(ID) %>%
      mutate(New.Month = for(i in 1:n()) {DF$Date.Delivery[i] %m+% months(0+i)})

Кажется, он работает, поскольку он дает мне новые даты в виде числа. Проблема в том, что он не создает новый столбец в DF. Действительно, когда я вызываю DF $ New.Month, появляется сообщение «Неизвестные столбцы:« New.Month »». Затем, когда я просматриваю DF, в конце есть своего рода data.frame или список вместо нового столбца с:

-attr(*, "groups")=Classes 'tbl_df' , 'tbl' and 'data.frame': 1791 obs. of 2 variables :
..$ Num.Contrat: chr "001" "002" "003" ....
..$ .rows: List of 1791
.. ..$ : int 15205
.. ..$ : int 16190 16191 16192 16193 16194
.. ..$ : int 5989 5990 5991
.. 
[... 20 lines omitted]

Я пытаюсь понять, почему мой код не создает новый столбец, как должно выполняться mutate.

Спасибо за вашу помощь

1 Ответ

2 голосов
/ 27 мая 2020

Привет и добро пожаловать в SO. Использование dplyr должно дать вам желаемый результат:

df %>%
  group_by(ID) %>%
  mutate(New.Month = Date.Delivery %m+% months(row_number(ID)))

# A tibble: 3 x 3
# Groups:   ID [2]
#    ID    Date.Delivery New.Month 
#    <chr> <date>        <date>    
# 1 001   2020-01-01    2020-02-01
# 2 001   2020-01-01    2020-03-01
# 3 002   2020-01-01    2020-02-01
...