Как мне пометить подразделения самого низкого уровня в организационной структуре (представленные несколькими столбцами LEVEL_ID)?

#r #data-cleaning

#r #очистка данных

Вопрос:

У меня есть набор данных, в котором перечислены различные секторы правительства на разных подсекторных уровнях. Это выглядит так:

 LEVEL1ID   LEVEL2ID   LEVEL3ID   LEVEL4ID   LEVEL5ID   YEAR   DESCRIP_E
0          0          0          0          0          2019   Government of X
5          0          0          0          0          2019   Department of Oceans
5          200        0          0          0          2019   Coast Guard
5          200        300        0          0          2019   Coast Guard HQ
5          200        300        400        0          2019   CG HQ - Business Mgmt
5          200        300        401        0          2019   CG HQ - IT
5          200        300        402        0          2019   CG HQ - Vessels
5          200        301        0          0          2019   CG Training
5          200        301        405        0          2019   CG Training - Employees
5          200        301        406        0          2019   CG Training - Students
5          200        302        0          0          2019   CG North
5          200        303        0          0          2019   CG East
5          200        303        407        0          2019   CG East - Shore-Based Personnel
5          200        303        407        500        2019   CG East - Business Mgmt
5          200        303        407        501        2019   CG East - Operations
0          0          0          0          0          2018   Government of X
5          0          0          0          0          2018   Department of Oceans
5          200        0          0          0          2018   Coast Guard
5          200        300        0          0          2018   Coast Guard HQ
5          200        300        400        0          2018   CG HQ - Business Mgmt
(and so on)
 

Я хочу создать новую двоичную переменную, которая помечает строки, представляющие организационные подразделения самого низкого уровня в течение данного года. То есть я хочу, чтобы мой набор данных выглядел следующим образом:

 LEVEL1ID   LEVEL2ID   LEVEL3ID   LEVEL4ID   LEVEL5ID   YEAR   UNIQUE     DESCRIP_E
0          0          0          0          0          2019   No         Government of X
5          0          0          0          0          2019   No         Department of Oceans
5          200        0          0          0          2019   No         Coast Guard
5          200        300        0          0          2019   No         Coast Guard HQ
5          200        300        400        0          2019   Yes        CG HQ - Business Mgmt
5          200        300        401        0          2019   Yes        CG HQ - IT
5          200        300        402        0          2019   Yes        CG HQ - Vessels
5          200        301        0          0          2019   No         CG Training
5          200        301        405        0          2019   Yes        CG Training - Employees
5          200        301        406        0          2019   Yes        CG Training - Students
5          200        302        0          0          2019   Yes        CG North
5          200        303        0          0          2019   No         CG East
5          200        303        407        0          2019   No         CG East - Shore-Based Personnel
5          200        303        407        500        2019   Yes        CG East - Business Mgmt
5          200        303        407        501        2019   Yes        CG East - Operations
0          0          0          0          0          2018   No         Government of X
5          0          0          0          0          2018   No         Department of Oceans
5          200        0          0          0          2018   No         Coast Guard
5          200        300        0          0          2018   No         Coast Guard HQ
5          200        300        400        0          2018   Yes        CG HQ - Business Mgmt
(and so on)
 

Как я мог бы сделать это в R (или Excel)?

Ответ №1:

Я думаю, это должно сработать:

 is_unique = function(x) !duplicated(x) amp; !duplicated(x, fromLast = TRUE)

df$UNIQUE = with(df, ifelse(
  is_unique(LEVEL5ID) |
    (is_unique(LEVEL4ID) amp; LEVEL5ID == 0) |
    (is_unique(LEVEL3ID) amp; LEVEL4ID == 0) |
    (is_unique(LEVEL2ID) amp; LEVEL3ID == 0) |
    (is_unique(LEVEL1ID) amp; LEVEL2ID == 0),
  "Yes", "No"
  )
)
 

Если вам нужно обобщить это до произвольного числа уровней, мы могли бы сделать и это, но записать это показалось целесообразным только для 5 уровней.