我有一个这样的数据帧:

df <- data.frame(
  Food = c("Apple", "Banana", "Carrot", "Donut", "Eclair", "Flour"),
  Ingredient = c("salt", "sodium chloride", "salt replacer", "unsalted", "veg salt", "vegetable salt")
)

我想使用grepl创建一个变量,该变量在"盐"或"氯化钠"存在时显示为真,而对于其他值"盐替代品"、"无盐"、"素食盐"、"植物盐"则显示为假.

输出应该是如下所示的数据报:

Food Ingredient Salt_Present
Apple salt TRUE
Banana sodium chloride TRUE
Carrot salt replacer FALSE
Donut unsalted FALSE
Eclair veg salt FALSE
Flour vegetable salt FALSE

为了实现这一点,我在编写正则表达式时遇到了困难.

How can I write a regex that will return true for Apple and Banana, but false for the other cases in the data?

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

推荐答案

试试这个:

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

^$确保没有部分匹配.

R相关问答推荐

使用ggcorrplot在相关性矩阵上标注supertitle和index标签

是否可以 Select 安装不带文档的R包以更有效地存储?

编码变量a、b、c以匹配来自另一个数据点的变量x

如何动态更新selectizeInput?

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

错误:非常长的R行中出现意外符号

制作等距离的线串副本

条形图和在Ploly中悬停的问题

如何通过ggplot2添加短轴和删除长轴?

R中的哈密顿滤波

无法定义沿边轨迹的 colored颜色 渐变(与值无关)

如何识别倒排的行并在R中删除它们?

如何在使用箭头R包(箭头::OPEN_DATASSET)和dplyr谓词时编写具有整齐计算的函数?

有没有办法将基于每个值中出现的两个关键字或短语的字符串向量重新编码为具有这两个值的新向量?

对R中的列表列执行ROW Mean操作

在鼠标悬停时使用Plotly更改geom_point大小

使用&Fill&Quot;在gglot中创建 colored颜色 渐变

以R表示的NaN值的IS.NA状态

如何将字符类对象中的数据转换为R中的字符串

Gggvenn为Venn增加了不存在的价值