'R for loop embedded in mutate

I have a dataframe "df" of animal feeding observations with ~50,000 rows. Each row is a unique food item eaten on a day of study.

The pertinent variables include:
"food_item" (an ID variable)
"day"
"month"
"year"
"time_feed" (total feeding time on the item per day)
"calories" (calories derived from each item per day)
"month_cals_total" (total monthly calories from all items)
"month_time_total" (total monthly feeding time total on all food items)

I want to find the percentage of total monthly calories and total monthly feeding time that each item contributes.

I could do this manually for each unique food item with

df %>%
    group_by(month) %>%
    filter(food_item == "item.1") %>%
    mutate(percent_monthly_calories = sum(calories) / month_cals_total) * 100,
           percent_monthly_time = sum(feed_time) / month_time_total) * 100)

and then repeat this procedure for food all food items, "item.2" through "item.150".

Desired output would be a dataframe retaining rows and columns but with two new columns added "percent_monthly_time" and "percent_monthly_calories" that list the percentage of each food item to monthly feeding time and monthly calories, respectively.

Any suggestions (preferably a tidyverse solution) about how to embed a for loop or an apply function within this so I can calculate the percentage of each food item to total monthly feeding time at once?



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source