You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用str_detect统计匹配的关键配料数量并返回具体配料?

解决食物配料关键成分统计与提取问题

我有一个包含食物及其对应配料的dataframe df,需要找出含有Flour、Water或Salt的食物。目前已通过str_detect实现了判断食物是否包含这些关键配料的功能,现在需要进一步完成:

  • 统计每种食物匹配到的关键配料数量
  • 在单独列中返回具体使用的关键配料
    预期输出包含Food、Ingredients、Key_Ingredient、Key_Count、Key_Used列。

完整的df数据如下:

df <- data.frame(
  Food = c("Appleberry Muffins", "Blue Moon Pancakes", "Crystalized Starfruit", 
           "Dragonfruit Delight", "Ethereal Eclairs", "Flaming Firefruit", 
           "Glowing Grapes", "Honeydew Haze", "Iridescent Ice Cream", 
           "Jellybean Jamboree", "Kiwi Kaleidoscope", "Lunar Lemons", 
           "Mystic Marshmallows", "Nebula Noodles", "Omega Oranges", 
           "Phantom Peaches", "Quasar Quince", "Radiant Raspberries", 
           "Stellar Strawberries", "Twilight Tangerines", "Universal Ugli Fruit", 
           "Vortex Veggies", "Whirlwind Walnuts", "Xenon Xacuti", 
           "Yellow Yams of Yore", "Zephyr Zucchini"),
  Ingredients = c("Flour, Vanilla Extract, Olive Oil, Milk, Garlic, Carrots, Chicken", 
                  "Baking Powder, Garlic, Eggs, Ice, Sugar, Tofu, Rice", 
                  "Milk, Beef, Tofu, Rice, Salt, Garlic, Mushrooms", 
                  "Rice, Milk, Pork, Yeast, Carrots, Tofu, Mushrooms", 
                  "Pasta, Flour, Water, Mushrooms, Chicken, Vanilla Extract, Yeast", 
                  "Pepper, Yeast, Vanilla Extract, Sugar, Wheat, Olive Oil, Pork", 
                  "Garlic, Nutmeg, Beef, Salt, Tofu, Onions, Baking Powder", 
                  "Salt, Water, Rice, Yeast, Flour, Honey, Mushrooms", 
                  "Water, Salt, Onions, Pasta, Spinach, Pork, Carrots", 
                  "Salt, Eggs, Flour, Baking Powder, Water, Potatoes, Yeast", 
                  "Water, Honey, Salt, Potatoes, Vanilla Extract, Pork, Pasta", 
                  "Salt, Tofu, Olive Oil, Baking Powder, Pork, Vanilla Extract, Cinnamon", 
                  "Salt, Flour, Onions, Water, Chicken, Eggs, Milk", 
                  "Honey, Flour, Pork, Beef, Potatoes, Spinach, Chicken", 
                  "Mushrooms, Water, Salt, Olive Oil, Spinach, Tofu, Potatoes", 
                  "Wheat, Carrots, Baking Powder, Tofu, Eggs, Nutmeg, Potatoes", 
                  "Honey, Tomatoes, Vanilla Extract, Flour, Garlic, Butter, Salt", 
                  "Salt, Yeast, Garlic, Rice, Sugar, Spinach, Baking Powder", 
                  "Flour, Onions, Spinach, Pork, Yeast, Water, Potatoes", 
                  "Potatoes, Eggs, Kale, Beef, Spinach, Vanilla Extract, Milk", 
                  "Cinnamon, Yeast, Potatoes, Flour, Salt, Water, Garlic", 
                  "Milk, Salt, Flour, Olive Oil, Garlic, Water, Spinach", 
                  "Salt, Flour, Beef, Garlic, Milk, Potatoes, Olive Oil", 
                  "Water, Salt, Yeast, Rice, Garlic, Vanilla Extract, Eggs", 
                  "Vanilla Extract, Garlic, Chestnuts, Baking Powder, Tofu, Carrots, Sugar", 
                  "Pork, Honey, Baking Powder, Onions, Sugar, Yeast, Water")
)

解决方案

利用stringr的str_extract_all提取所有匹配的关键配料,结合purrr工具处理列表型结果,即可生成所需列。完整代码如下:

library(tidyverse)

# 定义关键配料匹配模式
strings_to_check <- c("Water", "Salt", "Flour")
pattern <- paste(strings_to_check, collapse = "|")

df_result <- df %>%
  # 提取所有匹配的关键配料,返回列表格式
  mutate(Key_Used_List = str_extract_all(Ingredients, pattern)) %>%
  # 将列表转为逗号分隔的字符串,无匹配则为空
  mutate(Key_Used = map_chr(Key_Used_List, ~paste(.x, collapse = ", "))) %>%
  # 统计匹配到的关键配料数量
  mutate(Key_Count = map_int(Key_Used_List, length)) %>%
  # 判断是否包含关键配料(与原逻辑等价)
  mutate(Key_Ingredient = Key_Count > 0) %>%
  # 保留需要的列,移除中间临时列
  select(Food, Ingredients, Key_Ingredient, Key_Count, Key_Used)

关键步骤说明

  • str_extract_all(Ingredients, pattern):从配料字符串中批量提取所有符合条件的关键配料,每行返回一个列表
  • map_chr(...):将每行的配料列表转为便于阅读的逗号分隔字符串
  • map_int(...):统计每行匹配到的关键配料数量
  • Key_Ingredient = Key_Count > 0:通过数量判断是否包含关键配料,和原str_detect逻辑完全一致

部分结果示例

运行代码后,前5行输出结果如下:

FoodIngredientsKey_IngredientKey_CountKey_Used
Appleberry MuffinsFlour, Vanilla Extract, Olive Oil, Milk, Garlic, Carrots, ChickenTRUE1Flour
Blue Moon PancakesBaking Powder, Garlic, Eggs, Ice, Sugar, Tofu, RiceFALSE0
Crystalized StarfruitMilk, Beef, Tofu, Rice, Salt, Garlic, MushroomsTRUE1Salt
Dragonfruit DelightRice, Milk, Pork, Yeast, Carrots, Tofu, MushroomsFALSE0
Ethereal EclairsPasta, Flour, Water, Mushrooms, Chicken, Vanilla Extract, YeastTRUE2Flour, Water

内容的提问来源于stack exchange,提问作者Jay Bee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:28:14