我的数据集中有一列,如果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是按同一位置划分的不同管理者的数量。
答案 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