使用带布尔值的查找表计算R中的变量

使用带布尔值的查找表计算R中的变量,r,R,我有两个数据集:一个数据集具有产品成分的二分法变量(m),另一个查找表使用布尔术语将成分映射到产品标签(例如,在合并多个变量后成分是TRUE还是FALSE) 例如,m可能看起来像: id milk cheese eggs 001 TRUE TRUE FALSE 002 FALSE FALSE TRUE 003 FALSE FALSE FALSE label boolean ingredients vegan FALSE

我有两个数据集:一个数据集具有产品成分的二分法变量(
m
),另一个查找表使用布尔术语将成分映射到产品标签(例如,在合并多个变量后成分是
TRUE
还是
FALSE

例如,
m
可能看起来像:

id    milk  cheese eggs
001   TRUE  TRUE   FALSE
002   FALSE FALSE  TRUE
003   FALSE FALSE  FALSE
label            boolean  ingredients
vegan            FALSE    milk, cheese, eggs
gluten_free      FALSE    wheat, rye, barley
然后查找表
ingred
可能如下所示:

id    milk  cheese eggs
001   TRUE  TRUE   FALSE
002   FALSE FALSE  TRUE
003   FALSE FALSE  FALSE
label            boolean  ingredients
vegan            FALSE    milk, cheese, eggs
gluten_free      FALSE    wheat, rye, barley
所需的输出是
m
将包含一个新字段,该字段在将配料的布尔值(由列名表示)与查找表中逗号分隔的值匹配后合并
TRUE/FALSE

id    milk  cheese eggs   wheat   barely  rye    vegan   gluten_free
001   TRUE  TRUE   FALSE  FALSE   FALSE   FALSE  FALSE   TRUE
002   FALSE FALSE  TRUE   FALSE   TRUE    FALSE  FALSE   FALSE
003   FALSE FALSE  FALSE  TRUE    FALSE   FALSE  TRUE    FALSE

我一般认为,
ingred
中逗号分隔的值需要转换成矩阵,但我不确定如何组合
m
ingred
以获得所需的输出。谢谢你的帮助

A
base R
选项是通过分隔符(
“,”
)将第二个数据集的“成分”列拆分为向量的
列表,使用
Map
列表
以及“布尔”列的相应元素上循环,根据拆分的名称对第一个数据集的列进行子集,检查其是否不等于“布尔”值,按行进行求和(


df1[df2$label]您的
ingred
中是否有更多行,如果有,是否会有其他组合values@akrun是-我将修改我的示例。因为我正在使用的数据集是专有的并且非常复杂,所以我简化了示例,但将添加更多纹理来改进问题。