Когда я запускаю ваш код, я получаю предупреждение:
Warning message:
In grepl(df$letter, df$food) :
argument 'pattern' has length > 1 and only the first element will be used
Это подтверждается ?grepl
в pattern
:
If a character vector of length 2 or more is supplied,
the first element is used with a warning.
Итак, grepl находит a как в яблоке, так и в груше. Это не решает вашу проблему (применимо или один из ее вариантов?), Но объясняет результат, который вы получаете.