基于一列过滤数据库,多行

Filtering a database based on one column, for multiple rows

我有一个用户数据库,他们都需要一个特定的用户角色,在下面的示例中,对于他们所代表的每个公司,它是“用户角色 - 3”。

ex <- data.frame('Firm' = c("Firm 1", "Firm 2", "Firm 2", "Firm 2", "Firm 3", "Firm 3", "Firm 4", "Firm 5"), 
                 'User' = c("Person 1", "Person 2", "Person 2","Person 2","Person 3","Person 4", "Person 5", "Person 5"),
                  'Role' = c("User Role - 1", "User Role - 1","User Role - 2", "User Role - 3", "User Role - 1", "User Role - 3", "User Role - 3", "User Role - 2"))  

每个用户都必须具有用户角色 - 分配给每个公司 3 个。正如您在前面看到的那样 table 有些人在一家公司担任多个角色,或者个人被分配到多家公司。我正在尝试过滤掉所有拥有特定公司用户角色 - 3 的用户,所以我只剩下那些没有的用户。

之前

之后

如您所见,公司 2 /人员 2 已完全消失,因为他们被分配了多个角色给公司,其中一个是 3。虽然人员 5 具有用户角色 3,但它仅适用于其中一个两家公司,所以他们仍然在他们没有的公司的名单上。

我什至不知道要开始说实话。

ex %>% gather(Firm) 似乎把东西带到了这里不适用的键值对。

ex %>% subset(Role != "User Role - 3") 没有考虑到公司2可以完全删除。

我可以提取具有角色 ( ex %>% subset(Role == "User Role - 3")) 的用户和公司的列表,因此可以从原始列表中删除,这感觉是正确的起点,但我不知道如何通过此新信息过滤原始列表。当我尝试将子集应用于命令时,出现错误。

toremove <- subset(ex$Role == "User Role - 3")

Error in subset.default(ex$Role == "User Role - 3") : 
  argument "subset" is missing, with no default

我敢肯定这一定非常简单,也许我想多了,现在见树不见林。

任何帮助,甚至是正确步骤的线索,我们将不胜感激。

编辑:添加了 table 的图片,因为格式由于某种原因不起作用。

尝试

ex %>% 
    group_by(Firm, User) %>% 
                filter(!("User Role - 3" %in% Role))

输出

> ex %>% group_by(Firm, User) %>% filter(!("User Role - 3" %in% Role))
# A tibble: 3 x 3
# Groups:   Firm, User [3]
  Firm   User     Role         
  <chr>  <chr>    <chr>        
1 Firm 1 Person 1 User Role - 1
2 Firm 3 Person 3 User Role - 1
3 Firm 5 Person 5 User Role - 2