Here a solution using data.table
First order the data.table by customer
and date
Then group by customer
and select the frist two fruit
s
> df[order(customer,date)][,.(fruit1=fruit[1],fruit2=fruit[2]),by=customer]
customer fruit1 fruit2
1: A orange banana
2: B apple apple
3: C banana banana
Sample data
> df <- data.table(
+ customer = c('A','A','C','C','B','B','C','B','A'),
+ fruit = c('orange','apple','banana','orange','apple','banana','banana','apple','banana'),
+ date = c(as.Date('2018-05-04'),as.Date('2018-07-09'),as.Date('2018-01-02'),as.Date('2018-01-03'),as.Date('2018-01-02'),
+ as.Date('2018-04-05'),as.Date('2018-01-02'),as.Date('2018-01-06'),as.Date('2018-06-01'))
+ )
> df
customer fruit date
1: A orange 2018-05-04
2: A apple 2018-07-09
3: C banana 2018-01-02
4: C orange 2018-01-03
5: B apple 2018-01-02
6: B banana 2018-04-05
7: C banana 2018-01-02
8: B apple 2018-01-06
9: A banana 2018-06-01