R 为每个子组排列行
我有一个关于为每个分组的行排序的问题。假设我有一个关于公司员工信息的数据。该公司有三个部门(阿尔法、贝塔和西格玛),每个部门有两个团队(第一团队和第二团队)。一个人可以是团队的成员或领导者 问题是一个人可以属于多个团队,在不同的部门中扮演不同的角色。我想做的是为拥有多个职位的人,我想对他/她的主要工作和次要工作进行排名。排名逻辑是职位是最重要的标准:领导>成员。如果职位相等,部门是下一个最重要的标准:阿尔法>贝塔>西格玛。如果部门也是平等的,那么我应该看看团队:团队1>团队2。下面是结果的示例:R 为每个子组排列行,r,dplyr,R,Dplyr,我有一个关于为每个分组的行排序的问题。假设我有一个关于公司员工信息的数据。该公司有三个部门(阿尔法、贝塔和西格玛),每个部门有两个团队(第一团队和第二团队)。一个人可以是团队的成员或领导者 问题是一个人可以属于多个团队,在不同的部门中扮演不同的角色。我想做的是为拥有多个职位的人,我想对他/她的主要工作和次要工作进行排名。排名逻辑是职位是最重要的标准:领导>成员。如果职位相等,部门是下一个最重要的标准:阿尔法>贝塔>西格玛。如果部门也是平等的,那么我应该看看团队:团队1>团队2。下面是结果的示例:
Person_Name Department_Name Team_Name Team_Position Ranking
Tony Alpha 1 Member 1
Tony Beta 1 Member 2
Bill Alpha 1 Leader 1
Bill Alpha 2 Leader 2
Bill Beta 1 Leader 3
Luke Alpha 1 Member 2
Luke Beta 1 Leader 1
Luke Sigma 1 Member 3
我想我应该可以用dplyr包来实现这一点。然而,我在代码的细节上苦苦挣扎,不知道如何避免for/if循环,因为实际数据中有更多的部门和团队。谢谢 在这种情况下,您可以
排列
数据,并为每个人名
分配行号
library(dplyr)
df %>%
arrange(Person_Name, Team_Position, Department_Name, Team_Name) %>%
group_by(Person_Name) %>%
mutate(Ranking = row_number())
# Person_Name Department_Name Team_Name Team_Position Ranking
# <chr> <chr> <int> <chr> <int>
#1 Bill Alpha 1 Leader 1
#2 Bill Alpha 2 Leader 2
#3 Bill Beta 1 Leader 3
#4 Luke Beta 1 Leader 1
#5 Luke Alpha 1 Member 2
#6 Luke Sigma 1 Member 3
#7 Tony Alpha 1 Member 1
#8 Tony Beta 1 Member 2
df %>%
mutate(Team_Position = factor(Team_Position, levels = c('Leader', 'Member')),
Department_Name = factor(Department_Name,
levels = c('Alpha', 'Beta', 'Sigma')),
Team_Name = factor(Team_Name, levels = c(1, 2))) %>%
arrange(Person_Name, Team_Position, Department_Name, Team_Name) %>%
group_by(Person_Name) %>%
mutate(Ranking = row_number())