R 在字符向量列表的两列上成对执行setdiff

R 在字符向量列表的两列上成对执行setdiff,r,list,dplyr,R,List,Dplyr,我有一个数据帧,它有一列1,这是一个嵌套的字符向量列表。第2列是另一个类似的列表。我想定义第3列,其中每个字符向量的元素出现在第1列中,而不是第2列中 像这样: c1 c2 new c c('a', 'b') c('b', 'd') 'a' 我尝试映射setdiff: my.tibble = tibble( c1 = list(c('a', 'b'), c('b', 'c')), c2 = list(c('d', 'e'), c('e', 'f')) ) my.tibble = my

我有一个数据帧,它有一列1,这是一个嵌套的字符向量列表。第2列是另一个类似的列表。我想定义第3列,其中每个字符向量的元素出现在第1列中,而不是第2列中

像这样:

c1 c2 new c
c('a', 'b') c('b', 'd') 'a'
我尝试映射setdiff:

my.tibble = tibble(
  c1 = list(c('a', 'b'), c('b', 'c')),
  c2 = list(c('d', 'e'), c('e', 'f'))
)

my.tibble = my.tibble %>% 
  mutate(
    new.c = map(c1, ~ setdiff(., c2))
  )

my.tibble$new.c
它完整地复制了c1

如果我按行操作,它看起来像是为c2中向量中的每个值运行setdiff

my.tibble = my.tibble %>% 
  rowwise() %>%
  mutate(
    new.c = map(c1, ~ setdiff(., c2))
  )

my.tibble$new.c


我怀疑我被列表结构搞糊涂了,但我不确定是怎么搞的。

不是最好的例子,因为
col1
col2
中没有重叠,但我猜你在寻找
map2

library(dplyr)
library(purrr)

my.tibble %>%  mutate(new.c = map2(c1, c2, setdiff))
Map
位于底部R

my.tibble$new.c <- Map(setdiff, my.tibble$c1, my.tibble$c2)

my.tibble$new.c不是共享的最佳示例,因为
col1
col2
中没有重叠,但我猜您正在寻找
map2

library(dplyr)
library(purrr)

my.tibble %>%  mutate(new.c = map2(c1, c2, setdiff))
Map
位于底部R

my.tibble$new.c <- Map(setdiff, my.tibble$c1, my.tibble$c2)
my.tibble$new.c