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
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