使用 grepl 时如何排除某些字符串?

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

我有一个像这样的数据框:

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?

我还应该补充一点,这是一个玩具示例,在真实数据中,每种成分都有多个项目。例如,“矿物盐”和“盐”可能会出现在同一食品的成分变量中,或者“盐”和“无盐黄油”和“番茄酱”中。我不确定这是否会改变解决方案,但如果是的话可以更新示例数据和输出。

r regex grepl
1个回答
0
投票

试试这个:

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)
)

^
$
确保不存在部分匹配。

© www.soinside.com 2019 - 2024. All rights reserved.