我有一个像这样的数据框:
df <- data.frame(
Food = c("Apple", "Banana", "Carrot", "Donut", "Eclair", "Flour"),
Ingredient = c("salt", "sodium chloride", "salt replacer", "unsalted", "veg salt", "vegetable salt")
)
我想使用 grepl 创建一个变量,当存在“盐”或“氯化钠”时显示 TRUE,但对于其他值“盐替代品”、“无盐”、蔬菜盐”、“植物盐”则显示 FALSE。
输出应该是一个如下所示的数据帧:
食物 | 成分 | 盐_现在 |
---|---|---|
苹果 | 盐 | 正确 |
香蕉 | 氯化钠 | 正确 |
胡萝卜 | 盐替代品 | 错误 |
甜甜圈 | 无盐 | 错误 |
闪电泡芙 | 蔬菜盐 | 错误 |
面粉 | 植物盐 | 错误 |
我很难编写正则表达式来实现此目的。
如何编写一个正则表达式,对于 Apple 和 Banana 返回 true,但对于数据中的其他情况返回 false?
我还应该补充一点,这是一个玩具示例,在真实数据中,每种成分都有多个项目。例如,“矿物盐”和“盐”可能会出现在同一食品的成分变量中,或者“盐”和“无盐黄油”和“番茄酱”中。我不确定这是否会改变解决方案,但如果是的话可以更新示例数据和输出。
试试这个:
library(tidyverse)
df <- data.frame(
Food = c("Apple", "Banana", "Carrot", "Donut", "Eclair", "Flour"),
Ingredient = c("salt", "sodium chloride", "salt replacer", "unsalted", "veg salt", "vegetable salt")
)
df %>% mutate(
Salt_Present = grepl("^salt$|^sodium chloride$",Ingredient)
)
^
和 $
确保不存在部分匹配。