使用dplyr::rowwise设置操作

使用dplyr::rowwise设置操作,r,dplyr,R,Dplyr,我试图对以字符向量作为列表元素的列表变量执行集合操作(intersect、union、setdiff、setequal)。比如说, library(dplyr) list1 = list(c('a', 'b'), c('x', 'y', 'z')) list2 = list(c('b'), c('x', 'z')) df = data_frame(x = list1, y = list2) 差不多 df %>% rowwise() %>% mutate(z = setdiff(x,

我试图对以字符向量作为列表元素的列表变量执行集合操作(intersect、union、setdiff、setequal)。比如说,

library(dplyr)
list1 = list(c('a', 'b'), c('x', 'y', 'z'))
list2 = list(c('b'), c('x', 'z'))
df = data_frame(x = list1, y = list2)
差不多

df %>% rowwise() %>% mutate(z = setdiff(x, y))
似乎有效。但不是

df %>% rowwise() %>% mutate(z = intersect(x, y))
使用intersect()会显示错误消息:

错误:大小不兼容(2),应为1(组大小)或1

intersect()
为第二行返回多个元素,您需要将其包装为列表以适合单元格:

df %>% rowwise() %>% mutate(z = list(intersect(x, y)))

# Source: local data frame [2 x 3]
# Groups: <by row>

#           x         y         z
#      <list>    <list>    <list>
# 1 <chr [2]> <chr [1]> <chr [1]>
# 2 <chr [3]> <chr [2]> <chr [2]>
df%>%rowwise()%%>%mutate(z=list(intersect(x,y)))
#来源:本地数据帧[2 x 3]
#小组:
#x y z
#              
# 1   
# 2   

在旁注中,这同样适用于setdiff,但不适用于这两行都有一个1元素diff的特殊情况。