N_distinct由变量的第一值

时间:2018-11-10 01:44:47

标签: r group-by count

我的数据集中有一列,如果ID属于经理,则以1开头,如果ID属于工人,则以2开头。我想按位置计算ID的总数,然后按位置计算管理器的独特数。我将如何更改此代码,以使按位置显示一列唯一ID,而另一列仅包含管理者(ID以1开头)显示在不同ID而不是ID总数中?

MANAGERS_BYSITE <- file %>%
group_by(LOCATIONID) %>%
summarise(n_distinct(ID))
colnames(MANAGERS_BYSITE) <- c("LOCATIONID", "UNIQUEID", 
"UNIQUEMANAGERS")

我希望我的输出看起来像这样:

LOCATIONID   UNIQUEID    UNIQUEMANAGERS
01           3433532      6432

其中UNIQUEID是按位置划分的不同ID的数量,而UNIQUEMANAGERS是按同一位置划分的不同管理者的数量。

2 个答案:

答案 0 :(得分:1)

创建一个仅包含Manager ID的新列(managerid),即,如果以1开头则为id,否则为NA。

以下代码将为您提供所需的内容。

  

df%>%group_by(loc)%>%summarise(n_distinct(id),n_distinct(managerid)-1)

-1,因为它将NA作为唯一值。

答案 1 :(得分:1)

将来请输入一些示例数据,我们可以使用这些数据来帮助您更快地进行操作。

这是我创建的一些小示例代码的方式(我确信这不是最好或最简单的方法):

data <- data.frame(LOCATIONID=rep(1:3, 2),
                   ID=c("1_362711", "2_362181", "2_43289", "1_362711", "1_326173", "2_3261783"))

MANAGERS_BYSITE <- data %>%
    group_by(LOCATIONID) %>%
    summarise(UNIQUEID=n_distinct(ID)) %>%
    join(y = (filter(data, stri_sub(ID, 1, 1)=="1") %>%
              group_by(LOCATIONID) %>%
              summarise(UNIQUEMANAGERS=n_distinct(ID))), by="LOCATIONID")

这样,您无需创建任何额外的列或之后重命名任何内容。

输出:

   LOCATIONID UNIQUEID UNIQUEMANAGERS
       1         1           1
       2         2           1
       3         2           NA