检查值是否在r数据帧中的值数组中

检查值是否在r数据帧中的值数组中,r,R,我有一个数据框,它有两列水果和组。我想检查Fruits中的值是否是组中的数组。如果是,则变异一个新字段并添加“是”或“否” df <- data.frame(Fruits = c("Apple","Banana","Orange","Kiwi"), Group = I(list(c("Apple","Strawberry"), c("Orange","Kiwi"),

我有一个数据框,它有两列
水果
。我想检查
Fruits
中的值是否是
组中的数组。如果是,则变异一个新字段并添加“是”或“否”

df <- data.frame(Fruits = c("Apple","Banana","Orange","Kiwi"),
                 Group = I(list(c("Apple","Strawberry"), 
                                c("Orange","Kiwi"),
                                c("Apple","Banana"),
                                c("Apple","Kiwi")
                                )))

df$Fruits %in% df$Group

dfAs
Group
是一个我们无法直接比较的列表。一种方法是使用
mapply

df$Present <- c("No", "Yes")[mapply(`%in%`, df$Fruits, df$Group) + 1]

df
#  Fruits        Group Present
#1  Apple Apple, S....     Yes
#2 Banana Orange, Kiwi      No
#3 Orange Apple, B....      No
#4   Kiwi  Apple, Kiwi     Yes

或者类似地使用
purrr
map2\u lgl

library(dplyr)
library(purrr)

df %>%
  mutate(Present = c("No", "Yes")[map2_lgl(Fruits, Group, `%in%`) + 1])
我们可以使用

library(data.table)
setDT(df)[, Present := unlist(Map(`%in%`, Fruits, Group))]

非常感谢。不是“是”或“否”,我如何增加水果的价值column@SNT在这种情况下,由于它可以返回空值,您可以执行类似于
mapply(函数(x,y)ifelse(x%In%y,intersect(x,y),“”),df$Fruits,df$Group)的操作。
我有不同格式的数据。我可以把它添加到现有的问题中吗?我刚刚添加到这里
library(data.table)
setDT(df)[, Present := unlist(Map(`%in%`, Fruits, Group))]