Преобразование длинного в широкий формат

id <- c(1:8,1:8)
age1 <- c(7.5,6.7,8.6,9.5,8.7,6.3,9,5)
age2 <- age1 + round(runif(1,1,3),1)
age <- c(age1, age2)

tanner <-  sample(1:2, 16,replace=T)

df <- data.frame(id,age,tanner)


    id  age tanner
1   1  7.5      2
2   2  6.7      1
3   3  8.6      2
4   4  9.5      2
5   5  8.7      1
6   6  6.3      1
7   7  9.0      1
8   8  5.0      1
9   1 10.0      1
10  2  9.2      1
11  3 11.1      1
12  4 12.0      2
13  5 11.2      2
14  6  8.8      2
15  7 11.5      1
16  8  7.5      1

Выше приведен пример фрейма данных. Я хотел бы преобразовать его в формат ниже.

id   age at tanner=1   age at tanner=2     
1          10               7.5                               
2          6.7              NA
3          11.1             8.6
4           NA              9.5   
...

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

Например,

id  age  tanner
2    6.7   1
2    9.2   1

В этом случае 6.7 будет сохранено для id = 2 в новом наборе данных.

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

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