Search code examples
rhierarchy

Conditional Ifelse based on Rule for Employee Hierarchy


This might seem an easy problem but I am unable to hang around this.

I have a data where a person receives feedback from his peer where he can receive from his team member or his peer. In case if manager received feedback from team member, another column must have upward as category. If the manager has given it to his team member, the column must have downward elseif its from peer to peer with different managers, it must have Lateral

My Data looks like this:

Employee    ReceivedFrom    EmpDirector
Jake         Frazer         Frazer
Smith        Frazer         Frazer
Frazer       Jake           Alister
Drapper      Frazer         Alister

You can see that an Jake has received from Frazer while Jake's director is also Frazer and hence its downward. Also Notice in last row below that Drapper and Frazer both have same director but the feedback is itself not from Director, hence it is lateral

Results Wanted

Employee    ReceivedFrom    EmpDirector   FeedbackType
Jake         Frazer          Frazer        Downward
Smith        Frazer          Frazer        Downward
Frazer       Jake            Alister       Upward
Drapper      Frazer          Alister       Lateral

Solution

  • case_when() in dplyr can manipulate multiple condition statements. Before using it, you need to create an auxiliary variable, i.e. tmp, to represent the directors of the people from ReceivedFrom.

    library(dplyr)
    df %>%
      mutate(tmp = EmpDirector[match(ReceivedFrom, Employee)],
             FeedbackType = case_when(
               ReceivedFrom == EmpDirector ~ "Downward",
               Employee == tmp ~ "Upward",
               TRUE ~ "Lateral"),
             tmp = NULL) ## you can remove it if you want
    
    #   Employee ReceivedFrom EmpDirector FeedbackType
    # 1     Jake       Frazer      Frazer     Downward
    # 2    Smith       Frazer      Frazer     Downward
    # 3   Frazer         Jake     Alister       Upward
    # 4  Drapper       Frazer     Alister      Lateral