R 为每个子组排列行

R 为每个子组排列行,r,dplyr,R,Dplyr,我有一个关于为每个分组的行排序的问题。假设我有一个关于公司员工信息的数据。该公司有三个部门(阿尔法、贝塔和西格玛),每个部门有两个团队(第一团队和第二团队)。一个人可以是团队的成员或领导者 问题是一个人可以属于多个团队,在不同的部门中扮演不同的角色。我想做的是为拥有多个职位的人,我想对他/她的主要工作和次要工作进行排名。排名逻辑是职位是最重要的标准:领导>成员。如果职位相等,部门是下一个最重要的标准:阿尔法>贝塔>西格玛。如果部门也是平等的,那么我应该看看团队:团队1>团队2。下面是结果的示例:

我有一个关于为每个分组的行排序的问题。假设我有一个关于公司员工信息的数据。该公司有三个部门(阿尔法、贝塔和西格玛),每个部门有两个团队(第一团队和第二团队)。一个人可以是团队的成员或领导者

问题是一个人可以属于多个团队,在不同的部门中扮演不同的角色。我想做的是为拥有多个职位的人,我想对他/她的主要工作和次要工作进行排名。排名逻辑是职位是最重要的标准:领导>成员。如果职位相等,部门是下一个最重要的标准:阿尔法>贝塔>西格玛。如果部门也是平等的,那么我应该看看团队:团队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())