It works if you use the unique rows of df2
:
merge(df1, unique(df2))
noms fruits apple orange kiwi all_comb comb numbers age
1 john banana 0 0 0 0 1 1 34
2 john apple 1 0 0 1 1 2 34
3 john apple 1 0 0 1 1 3 34
4 john apple 1 0 0 1 1 4 34
5 lucy kiwi 0 0 1 0 1 1 89
6 lucy orange 0 1 0 0 1 2 89
7 lucy apple 1 0 0 1 1 3 89
8 lucy berry 0 0 0 0 1 4 89
9 mary apple 1 0 0 1 1 1 65
10 mary grape 0 0 0 0 1 2 65
11 mary orange 0 1 0 0 1 3 65
12 mary apple 1 0 0 1 1 4 65
13 tom orange 0 1 0 0 1 1 12