如何使用dplyr组管道获取集合差异和交点

如何使用dplyr组管道获取集合差异和交点,r,tidyverse,R,Tidyverse,我有以下数据框: library(tidyverse) dat <- tribble( ~category, ~status, ~content, 1, "control", "A", 1, "control", "Z", 1, "treated", "A", 1, "treated", "Z", 1, "control", "B", 2, "control", "C", 2, "control", "D", 2, "treated", "C",

我有以下数据框:

library(tidyverse)

dat <- tribble(
  ~category, ~status, ~content,
  1, "control", "A",
  1, "control", "Z",
  1, "treated", "A",
  1, "treated", "Z",
  1, "control", "B",
  2, "control", "C",
  2, "control", "D",
  2, "treated", "C",
  2, "treated", "F"
) %>% 
  arrange(category, status, content)


dat
仅处理
差异的输出:

category    differences_control_only
1           B
2           D
category    differences_treated_only
1           not_available
2           F
处理的
与控制的
交叉点的输出:

  category      intersection
    1           A
    1           Z
    2           C
因此,在一天结束时,将有3个数据帧作为输出。 我怎样才能做到这一点

在此示例中,分组仅基于一列(
category

在实际情况下,分组可以是多列。

要获得差异,我们可以
类别
内容
进行分组,并选择只有一个不同
状态的组

library(dplyr)
dat %>% group_by(category, content) %>% filter(n_distinct(status) == 1)

#  category status  content
#     <dbl> <chr>   <chr>  
#1        1 control B      
#2        2 control D      
#3        2 treated F         

要获得差异,我们可以按
类别
内容
对您进行分组,并选择只有一个不同状态的组

library(dplyr)
dat %>% group_by(category, content) %>% filter(n_distinct(status) == 1)

#  category status  content
#     <dbl> <chr>   <chr>  
#1        1 control B      
#2        2 control D      
#3        2 treated F         

我们可以使用
data.table

library(data.table)
setDT(dat)[,  .SD[uniqueN(status) > 1], .(category, content)]

我们可以使用
data.table

library(data.table)
setDT(dat)[,  .SD[uniqueN(status) > 1], .(category, content)]

谢谢,但有不同之处,我还想指出内容的
状态。我怎样才能做到这一点呢?谢谢,但有不同之处,我还想指出内容的
状态。我怎样才能做到这一点?