使用dplyr :: rowwise设置操作

时间:2016-08-12 15:31:15

标签: r dplyr

我尝试对包含字符向量作为列表元素的列表变量执行set操作(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

1 个答案:

答案 0 :(得分:4)

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]>