如何将字符向量与TIBLE in R中的字符向量列表相匹配?

如何将字符向量与TIBLE in R中的字符向量列表相匹配?,r,dplyr,tidyverse,purrr,R,Dplyr,Tidyverse,Purrr,我想比较TIBLE中的A列和B列,看看B列中是否存在A列中的元素。A列是一个字符向量。列B是字符向量的列表。我想一行一行地做这个。我可以通过循环来完成 library(tidyverse) my.tibble = c('a','b','c') %>% tibble my.list = list(c('a','b'),c('b','c'),c('d','e')) my.tibble = my.tibble %>% add_column(my.list) its.in.it = as

我想比较TIBLE中的A列和B列,看看B列中是否存在A列中的元素。A列是一个字符向量。列B是字符向量的列表。我想一行一行地做这个。我可以通过循环来完成

library(tidyverse)

my.tibble = c('a','b','c') %>% tibble
my.list = list(c('a','b'),c('b','c'),c('d','e'))
my.tibble = my.tibble %>% add_column(my.list)

its.in.it = as.list(NULL)
for (i in 1:nrow(my.tibble)){
    its.in.it[[i]] = my.tibble[i,1] %in% unlist(my.tibble[i,2])
}

my.tibble$its.in.it = unlist(its.in.it)
my.tibble

我正在尝试使用dplyr/purrr或apply来实现这一点。我不确定我是应该分组、嵌套还是拆分,有很多组合。

我们可以使用
行方式

library(tidyverse)
names(my.tibble) <- LETTERS[1:2]
my.tibble %>% 
   rowwise() %>%
   mutate(itsinit = A  %in% unlist(B))
# A tibble: 3 x 3
#  A     B         itsinit
#  <chr> <list>    <lgl>  
#1 a     <chr [2]> TRUE   
#2 b     <chr [2]> TRUE   
#3 c     <chr [2]> FALSE  
库(tidyverse)
名称(my.tibble)%
行()
突变(itsinit=A%在未列出的%B中)
#一个tibble:3x3
#A B ITSINT
#         
#真的吗
#2 b正确
#3 c错误

注意:@kath使用
map2
的方法会更快

您可以使用
map2\u lgl
来获取两个输入,循环它们并返回一个逻辑向量

names(my.tibble) <- c("char", "char.list")
my.tibble %>% 
  mutate(its.in.it = map2_lgl(char, char.list, ~ .x %in% .y))

# A tibble: 3 x 3
#   char  char.list its.in.it
#   <chr> <list>    <lgl>    
# 1 a     <chr [2]> TRUE     
# 2 b     <chr [2]> TRUE     
# 3 c     <chr [2]> FALSE  
名称(my.tibble)%
突变(its.in.it=map2_lgl(char,char.list,~.x%in%.y))
#一个tibble:3x3
#char char.list它的.in.it
#            
#真的吗
#2 b正确
#3 c错误

使用
应用
时,情况如下:

apply(my.tibble, 1, function(x) x[1] %in% unlist(x[2]))
#[1]  TRUE  TRUE FALSE

my.tibble$its.in.it <- apply(my.tibble, 1, function(x) x[1] %in% unlist(x[2]))
apply(my.tibble,1,函数(x)x[1]%在%unlist(x[2])中)
#[1] 真假

my.tibble$its.in.it还有一个dplyr版本的apply解决方案


my.tibble%>%mutate(its.in.it=.%in%unlist(my.tibble$my.list))

这会引发一个错误。请在发布前测试您的代码。您能指定错误吗?我没有错误
R版本3.5.1(2018-07-02)
平台:x86_64-apple-darwin15.6.0(64位)
运行于:macOS High Sierra 10.13.2
[1]bindrcpp_0.2.2用于CATS_0.3.0 stringr_1.3.1.1 dplyr_0.7.7 purrr_0.2.5 readr_1.1.1.1
[7]tidyr_0.8.2 tibble_1.4.2 ggplot2_3.1.0 tidyverse_1.2.1
很抱歉,我犯了错误。它不再是了,所以我可能在我的R会话中弄乱了你的代码。但是现在我得到了所有的
TRUE
,当它应该是前两个
TRUE
和第三个a
FALSE
时。你能检查一下吗,pease?
my.tibble%>%mutate(its.in.it=.%in%unlist(my.list))
可以工作,但是
my.tibble%>%mutate(its.in.it=.%in%unlist(my.tibble$my.list))
不能(它也会为我返回
c(t,t,t,t)
结果,它应该不会),我不知道为什么。