purrr:将%in%与列表列一起使用

purrr:将%in%与列表列一起使用,r,dplyr,purrr,R,Dplyr,Purrr,我有一列问题回答和一列可能的正确答案。我想创建第三个逻辑列correct,以显示响应是否与可能的正确答案之一匹配 我想我可能需要使用一个purrr函数,但我不确定如何使用一个映射函数,例如%in% 可供图书馆使用 图书馆弹琴 > >正在附加包:“dplyr” >以下对象已从“package:stats”屏蔽: > >滤波器,滞后 >以下对象已从“package:base”屏蔽: > >相交、setdiff、setequal、并集 图书馆咕噜声 数据% mutatecorrect=在%c'a

我有一列问题回答和一列可能的正确答案。我想创建第三个逻辑列correct,以显示响应是否与可能的正确答案之一匹配

我想我可能需要使用一个purrr函数,但我不确定如何使用一个映射函数,例如%in%

可供图书馆使用 图书馆弹琴 > >正在附加包:“dplyr” >以下对象已从“package:stats”屏蔽: > >滤波器,滞后 >以下对象已从“package:base”屏蔽: > >相交、setdiff、setequal、并集 图书馆咕噜声 数据% mutatecorrect=在%c'a',b'中的响应% >一个tibble:3x3 >回答正确 > >真的吗 >2 b正确 >3 c错误 不起作用 数据%>% mutatecorrect=正确答案百分比中的响应百分比 >一个tibble:3x3 >回答正确 > >一个假的 >2 b错误 >3 c错误 由v0.2.1于2018年11月5日创建的%in%不检查列表中的嵌套元素,请使用mapply baseR或map2 purrr在列中循环并检查:

data %>% mutate(correct = mapply(function (res, ans) res %in% ans, response, correct_answers))
# A tibble: 3 x 3
#  response correct_answers correct
#  <chr>    <list>          <lgl>  
#1 a        <chr [2]>       TRUE   
#2 b        <chr [2]>       TRUE   
#3 c        <chr [2]>       FALSE  
或者正如@thelatemail所评论的,两者都可以简化:

data %>% mutate(correct = mapply(`%in%`, response, correct_answers)) 
data %>% mutate(correct = map2_lgl(response, correct_answers, `%in%`))
%在%中,如果不检查列表中的嵌套元素,请使用mapply baseR或map2 purrr循环遍历列并检查:

data %>% mutate(correct = mapply(function (res, ans) res %in% ans, response, correct_answers))
# A tibble: 3 x 3
#  response correct_answers correct
#  <chr>    <list>          <lgl>  
#1 a        <chr [2]>       TRUE   
#2 b        <chr [2]>       TRUE   
#3 c        <chr [2]>       FALSE  
或者正如@thelatemail所评论的,两者都可以简化:

data %>% mutate(correct = mapply(`%in%`, response, correct_answers)) 
data %>% mutate(correct = map2_lgl(response, correct_answers, `%in%`))
或者只映射“%in%”、data$response、data$correct\u答案,以避免匿名函数。如果你想要一个更美观的函数名和参数,甚至可以选择mapplyis.element,el=data$response,set=data$correct\u answers。或者只需将“%in%”映射到%`,data$response,data$correct\u answers以避免匿名函数。如果您想要更美观的函数名和参数,甚至可以选择mapplyis.element、el=data$response、set=data$correct\u。