我的数据集中有一列,如果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