基于员工层次结构规则的条件 Ifelse

Conditional Ifelse based on Rule for Employee Hierarchy

这似乎是一个简单的问题,但我无法解决这个问题。

我有一个数据,其中一个人从他的同事那里收到反馈,他可以从他的团队成员或他的同事那里收到反馈。如果经理收到团队成员的反馈,另一列必须有 upward 作为类别。如果经理已将其交给他的团队成员,则该列必须具有 downward 否则如果它是与不同经理的点对点,则它必须具有 Lateral

我的数据是这样的:

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

您可以看到 Jake 收到了 Frazer 的邮件,而 Jake 的 主管也收到了弗雷泽,因此向下。还要注意下面最后一行 DrapperFrazer 都有相同的导演,但反馈本身不是来自导演,因此是 横向

想要结果

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

case_when() in dplyr 可以操作多个条件语句。在使用之前,需要创建一个辅助变量,即tmp,代表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