求编写R函数统计recipes数据框中Top3高频食材
统计recipes数据框中Top3高频食材的R函数
需求说明
需要实现一个R函数,统计recipes数据框中出现次数最多的前3种食材。给定的recipes数据框结构如下(CSV格式):
"id","name","area","ingredients" 53010,"Lamb Tzatziki Burgers","Greek","Bulgur Wheat, Lamb Mince, Cumin, Coriander, Paprika, Garlic, Olive Oil, Bun, Cucumber, Greek Yogurt, Mint" 52909,"Tarte Tatin","French","Puff Pastry, Plain Flour, Braeburn Apples, Caster Sugar, Butter, Creme Fraiche" 52871,"Yaki Udon","Japanese","Udon Noodles, Sesame Seed Oil, Onion, Cabbage, Shiitake Mushrooms, Spring Onions, Mirin, Soy Sauce, Caster Sugar, Worcestershire Sauce" 52875,"Chicken Ham and Leek Pie","British","Chicken Stock, Chicken Breast, Butter, Leek, Garlic, Plain Flour, Milk, White Wine, Double Cream, Ham, Sea Salt, Pepper, Plain Flour, Butter, Free-range Egg, Beaten, Cold Water, Free-range Egg, Beaten" 53019,"Pierogi (Polish Dumplings)","Polish","Butter, Chopped Onion, Sauerkraut, Butter, Chopped Onion, Potatoes, Eggs, Sour Cream, Flour, Salt, Baking Powder"
期望输出为包含食材名称和对应次数的表格,示例如下:
"name", "output" "butter", 5 "plain flour", 3 "caster sugar", 2
实现代码
1. 构造示例数据
先把示例数据加载为R数据框:
# 构造示例数据框 recipes <- data.frame( id = c(53010, 52909, 52871, 52875, 53019), name = c("Lamb Tzatziki Burgers", "Tarte Tatin", "Yaki Udon", "Chicken Ham and Leek Pie", "Pierogi (Polish Dumplings)"), area = c("Greek", "French", "Japanese", "British", "Polish"), ingredients = c( "Bulgur Wheat, Lamb Mince, Cumin, Coriander, Paprika, Garlic, Olive Oil, Bun, Cucumber, Greek Yogurt, Mint", "Puff Pastry, Plain Flour, Braeburn Apples, Caster Sugar, Butter, Creme Fraiche", "Udon Noodles, Sesame Seed Oil, Onion, Cabbage, Shiitake Mushrooms, Spring Onions, Mirin, Soy Sauce, Caster Sugar, Worcestershire Sauce", "Chicken Stock, Chicken Breast, Butter, Leek, Garlic, Plain Flour, Milk, White Wine, Double Cream, Ham, Sea Salt, Pepper, Plain Flour, Butter, Free-range Egg, Beaten, Cold Water, Free-range Egg, Beaten", "Butter, Chopped Onion, Sauerkraut, Butter, Chopped Onion, Potatoes, Eggs, Sour Cream, Flour, Salt, Baking Powder" ), stringsAsFactors = FALSE )
2. 编写统计函数
top_3_ingredients <- function(df) { # 拆分所有食材字符串,转为小写并去除首尾空格 all_ingredients <- strsplit(df$ingredients, ",") %>% unlist() %>% trimws() %>% tolower() # 统计每个食材的出现次数,转换为数据框并重命名列 ingredient_counts <- table(all_ingredients) %>% as.data.frame(stringsAsFactors = FALSE) %>% setNames(c("name", "output")) # 按次数降序排序,取前3条 top3 <- ingredient_counts[order(-ingredient_counts$output), ] %>% head(3) return(top3) }
3. 运行函数并查看结果
# 调用函数 result <- top_3_ingredients(recipes) # 打印结果(隐藏行号) print(result, row.names = FALSE)
运行后输出:
name output butter 5 plain flour 3 caster sugar 2
如果需要输出为CSV格式,执行以下代码:
write.csv(result, "top3_ingredients.csv", row.names = FALSE)
内容的提问来源于stack exchange,提问作者Harshal Soni
相关产品推荐
相关产品推荐

