r-N_distinct由变量的第一个值决定



我的数据集中有一列,如果ID属于管理者,则以1开头;如果ID属于工作者,则以2开头。我想按位置计算ID的不同总数,然后按位置仅计算经理的不同数量。我该如何更改此代码,以便有一列按位置划分的总不同ID,而另一列仅包含经理(ID以1开头(,以不同而非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是同一位置划分的独立管理器的数量。

创建一个只有Manager id的新列(managerid(,即如果它以1开头,则具有id,否则为NA。

下面的代码应该会给出您要查找的内容。

df%>%group_by(loc(%>%summary(n_distinct(id(,n_distincit(managerid(-1(

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

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

以下是我创建的一些小样本代码的方法(我确信这不是最好或最简单的方法(:

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

相关内容