如何计算并返回使用 str_detect 检测到列表中的哪些字符串?

问题描述 投票:0回答:1

我有一个数据框

df
,其中包含食物及其相应的成分(
df
粘贴在最后)。

我对哪些食物含有“面粉”、“水”或“盐”感兴趣。

使用

str_detect
您可以确定食物是否含有以下一种或多种成分:

library(tidyverse)

strings_to_check <- c("Water", "Salt", "Flour")

df2 <- df %>%
  mutate(Key_Ingredient = str_detect(Ingredients, paste(strings_to_check, collapse = "|")))

我怎样才能更进一步,获取所使用的关键成分的数量并返回使用了哪些关键成分?换句话说,如何计算检测到的字符串列表中的字符串数量并返回这些字符串在单独的值列中检测到的?

预期输出是:

食物 成分 关键_成分 键_计数 钥匙_已使用
苹果莓松饼 面粉,香草精,橄榄油,牛奶,大蒜,胡萝卜,鸡肉 正确 2 面粉、盐
蓝月煎饼 泡打粉,大蒜,鸡蛋,冰,糖,豆腐,米 错误 0 不适用
结晶杨桃 牛奶,牛肉,豆腐,米,盐,大蒜,蘑菇 正确 1
火龙果喜悦 米,牛奶,猪肉,酵母,胡萝卜,豆腐,蘑菇 错误 0 不适用
空灵泡芙 意大利面,面粉,水,蘑菇,鸡肉,香草精,酵母 正确 2 面粉、水
燃烧的火果 胡椒,酵母,香草精,糖,小麦,橄榄油,猪肉 错误 0 不适用
发光的葡萄 大蒜,肉豆蔻,牛肉,盐,豆腐,洋葱,泡打粉 正确 1
蜜露雾霾 盐,水,米,酵母,面粉,蜂蜜,蘑菇 正确 2 水、盐
彩虹冰淇淋 水,盐,洋葱,面食,菠菜,猪肉,胡萝卜 正确 2 水、盐
软糖大餐 盐,鸡蛋,面粉,泡打粉,水,土豆,酵母 正确 2 水、盐
猕猴桃万花筒 水,蜂蜜,盐,土豆,香草精,猪肉,面食 正确 1
月球柠檬 盐,豆腐,橄榄油,泡打粉,猪肉,香草精,肉桂 正确 1
神秘棉花糖 盐,面粉,洋葱,水,鸡肉,鸡蛋,牛奶 正确 2 面粉、水
星云面 蜂蜜,面粉,猪肉,牛肉,土豆,菠菜,鸡肉 正确 1 面粉
欧米茄橙子 蘑菇,水,盐,橄榄油,菠菜,豆腐,土豆 正确 2 水、盐
幻影桃子 小麦,胡萝卜,泡打粉,豆腐,鸡蛋,肉豆蔻,土豆 错误 0 不适用
类星体柑橘 蜂蜜,西红柿,香草精,面粉,大蒜,黄油,盐 正确 2 面粉、盐
光芒四射的覆盆子 盐,酵母,大蒜,大米,糖,菠菜,泡打粉 正确 1
星星草莓 面粉,洋葱,菠菜,猪肉,酵母,水,土豆 正确 2 面粉、水
黄昏橘子 土豆、鸡蛋、羽衣甘蓝、牛肉、菠菜、香草精、牛奶 错误 0 不适用
万能丑果 肉桂,酵母,土豆,面粉,盐,水,大蒜 正确 2 水、盐
涡旋蔬菜 牛奶,盐,面粉,橄榄油,大蒜,水,菠菜 正确 2 水、盐
旋风核桃 盐,面粉,牛肉,大蒜,牛奶,土豆,橄榄油 正确 2 水、盐
氙气Xacuti 水,盐,酵母,大米,大蒜,香草精,鸡蛋 正确 2 水、盐
昔日的黄山药 香草精,大蒜,栗子,泡打粉,豆腐,胡萝卜,糖 错误 0 不适用
西风西葫芦 猪肉,蜂蜜,泡打粉,洋葱,糖,酵母,水 正确 2 水、盐

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")
)
r stringr
1个回答
0
投票

您可以使用 str_count 和 str_match_all 函数。

df2 <- df %>%
    mutate(Key_Ingredient = str_detect(Ingredients, paste(strings_to_check, collapse = "|"))) %>% 
    mutate(Key_Count=str_count(Ingredients,paste(strings_to_check,collapse="|"))) %>% 
    mutate(Key_Used=str_match_all(Ingredients,paste(strings_to_check,collapse="|")))
© www.soinside.com 2019 - 2024. All rights reserved.