R如何查找有多少用户只有一个值

时间:2016-08-11 20:52:21

标签: sql r dataframe

我有一个名为user_role的数据框,其中有一个键值(userid)。我想看看这些用户ID中有多少只有一个名为role的分类变量的值。

以下是一些示例数据:

userid role  
ame1   programmer
ame1   programmer
ame1   analyst
cal5   programmer
cal5   programmer
up2    sales

我希望cal5在输出数据集中,因为只有一个角色,但ame1不应该在输出数据框中,因为它有多个角色值。

我尝试过这样的事情:

("select userid, role, count(*) from user_role  group by userid, role having count(*) == 1")

但只能获得具有1行或角色值的用户。

("select userid, role, count(*) from user_role  group by userid, role having count(*) > 1")

不会只获得具有一个角色值的那些,即使它们有多行

我想在输出中显示cal5和up2。理想情况下,我希望能够有一个子句,其中我只包含2行或更多行的用户。

由于

2 个答案:

答案 0 :(得分:2)

countdistinct一起使用,仅将结果限制为只有一个角色的用户。然后要检查多行,请使用count(*) > 1

select userid, min(role) as role
from user_role  
group by userid
having count(*) > 1 and count(distinct role) = 1

答案 1 :(得分:1)

您可以在R

中使用dplyr个包
library(dplyr)

df %>% group_by(userid) %>% summarise(n_distinct(role))

输出看起来像这样:

1   ame1                2
2   cal5                1
3    up2                1

您可以根据自己想要的条件进行选择。

说,所有等于1的人。

df %>% group_by(userid) %>% summarise(n_distinct(role)==1)