基于一列过滤数据库,多行
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
我有一个用户数据库,他们都需要一个特定的用户角色,在下面的示例中,对于他们所代表的每个公司,它是“用户角色 - 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