от «длинного» до «широкого» формата

от вопрос уже есть ответ здесь:

Изменение формы данных в R с «логином» и «выходом из системы» 5 ответовМои данные выглядят так:

Я пытаюсь сделать так, чтобы это выглядело так:

Я хотел бы сделать это в Tidyverse, используя%>% - цепочки.

df <- 
structure(list(id = c(2L, 2L, 4L, 5L, 5L, 5L, 5L), start_end = structure(c(2L, 
1L, 2L, 2L, 1L, 2L, 1L), .Label = c("end", "start"), class = "factor"), 
    date = structure(c(6L, 7L, 3L, 8L, 9L, 10L, 11L), .Label = c("1979-01-03", 
    "1979-06-21", "1979-07-18", "1989-09-12", "1991-01-04", "1994-05-01", 
    "1996-11-04", "2005-02-01", "2009-09-17", "2010-10-01", "2012-10-06"
    ), class = "factor")), .Names = c("id", "start_end", "date"
), row.names = c(3L, 4L, 7L, 8L, 9L, 10L, 11L), class = "data.frame")
Что я пробовал:
data.table::dcast( df, formula = id ~ start_end, value.var = "date", drop = FALSE )  # does not work because it summarises the data

tidyr::spread( df, start_end, date )  # does not work because of duplicate values


df$id2 <- 1:nrow(df)
tidyr::spread( df, start_end, date ) # does not work because the dataset now has too many rows.

Эти вопросы не отвечают на мой вопрос:

Использование спреда с дублирующимися идентификаторами для строк (потому что они суммируют)

R: функция распространения по фрейму данных с дубликатами (потому что они вставляют значения вместе)

Изменение формы данных в R с помощью времени входа в систему и выхода из системы (потому что специально не спрашиваю / отвечаю, используя tidyverse и цепочку)

Ответы на вопрос(1)

Ваш ответ на вопрос