0

我有一个用户数据库,他们都需要一个特定的用户角色,在下面的示例中,它是“用户角色 - 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。正如您在前表中看到的,有些人在单个公司担任多个角色,或者个人被分配到多个公司。我正在尝试过滤掉所有具有特定公司用户角色的用户 - 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

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

任何帮助,甚至是正确前进的线索,都将不胜感激。

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

4

1 回答 1

1

尝试

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
于 2021-04-21T18:59:39.577 回答