Сводная таблица в R с колонкой для каждого часа дня - PullRequest
0 голосов
/ 26 марта 2020

Я пытаюсь воссоздать сводную таблицу в RI, обычно создаваемую в Excel.

Необработанные данные выглядят так, за исключением тысяч строк (не идентифицированных):

ORDER_ID        ACT_DATE    ACT_TIME    ACT_TYPE                                    NURSE_UNIT  FACILITY_AREA   USER_NAME                                                    
111 2/28/2020   12:04   MODIFY                                      BG RCU      BGMC            User 1
112 2/27/2020   17:50   MODIFY                                      BG CCU E    BGMC            User 2                                           
113 2/27/2020   17:50   MODIFY                                      BG CCU E    BGMC            User 2                                           
114 2/27/2020   14:31   CANCEL/DC                                   BG CCU E    BGMC            User 2                                           
115 2/28/2020   6:03    CANCEL/DC                                   BG CCU E    BGMC            User 2                                           
116 2/28/2020   6:03    CANCEL/DC                                   BG CCU E    BGMC            User 2                                           
117 2/28/2020   10:29   CANCEL/DC                                   BG CCU E    BGMC            User 2                                           
118 2/28/2020   9:20    MODIFY                                      BG CCU E    BGMC            User 3                                                  
119 2/24/2020   12:43   VERIFY                                      BG 5 Sou    BGMC            User 4                                                 
110 2/26/2020   9:08    CANCEL/DC                                   BG 6 Sou    BGMC            User 5                                                  
111 2/27/2020   17:50   MODIFY                                      BG CCU E    BGMC            User 2                                           
112 2/28/2020   5:57    CANCEL/DC                                   BG CCU E    BGMC            User 2                                           

Исходный код:

library(dplyr)

bgmcOrderAction <- read.csv('C:\\Users\\xxx\\Desktop\\bgmc_order_action_report_20200223.csv')

# filter the data
byUnit <- bgmcOrderAction %>%
  # remove this strange extra column
  select(-c(X)) %>%

  #remove extra white space
  mutate(USER_NAME = trimws(USER_NAME)) %>%
  mutate(ACT_TYPE = trimws(ACT_TYPE)) %>%
  mutate(ACT_TIME = trimws(ACT_TIME)) %>%
  mutate(NURSE_UNIT = trimws(NURSE_UNIT)) %>%
  mutate(FACILITY_AREA = trimws(FACILITY_AREA)) %>%

  # convert the time from HH:MM to just HH
  mutate(ACT_HR = substr(ACT_TIME, 1, 2)) %>%

  # we're interested in the quantity of order actions in each nurse unit per hour
  group_by(NURSE_UNIT, ACT_HR) %>%

  #mutate(count = n()) %>%
  summarise(ACT_COUNT = n())
byUnit

NURSE_UNIT: описание медсестры
ACT_HR: час, когда произошло действие
ACT_COUNT: суммарное количество каждого уникального вхождения

> byUnit
# A tibble: 688 x 3
# Groups:   NURSE_UNIT [36]
   NURSE_UNIT ACT_HR ACT_COUNT
   <chr>      <chr>      <int>
 1 BG 2 Sou   01            15
 2 BG 2 Sou   09             2
 3 BG 2 Sou   12            16
 4 BG 2 Sou   15            15
 5 BG 2 Sou   17            29
 6 BG 2 Sou   18            44
 7 BG 2 Sou   19            14
 8 BG 2 Sou   20            16
 9 BG 2 Sou   21            43
10 BG 2 Sou   22            30
# ... with 678 more rows

Мой желаемый результат будет выглядеть примерно так (в основном макет типа тепловой карты), где метки строк - это каждая единица медсестры только один раз, а метки столбцов - каждый час дня (военное время) только один раз. Число в таблице представляет ACT_COUNT для этой конкретной медсестры в конкретный час. Цель состоит в том, чтобы узнать, сколько действий происходит в каждый час дня в каждом подразделении медсестры.

Пример вывода:

          0  1  2  3  4  5  6  7  8  9  10  11  12  13  14  15  16  17  18  19  20  21  22  23
Unit1     0  1  5  0  7  1  0  0  0  0  0   0   0   2   0   1   8   9   0   0   3   4   5   1
Unit2     0  0  1  0  2  1  0  0  0  0  0   6   0   0   4   0   8   0   0   0   3   0   2   0
Unit3     0  1  2  0  4  1  0  0  0  0  0   0   0   2   0   1   0   9   3   0   3   4   1   1
Unit4     0  1  0  0  1  1  0  0  0  0  0   0   0   0   4   1   8   9   0   0   0   4   1   1
BG 2 Sou  0  15 0  0  0  0  0  0  0  2  0   0   16  0   0   15  0   29  44  0   0   0   0   0

1 Ответ

0 голосов
/ 26 марта 2020

И tapply, и by (я считаю, что это обёрнутая оболочка) должны выполнять эту работу. Я думаю, что есть и несколько других способов. Возможно, вы сможете просто набрать summarize() в тидиверсе, если вам нужен фрейм данных, в котором есть все итоги.

Независимо от того, что вы ищете, собираете некоторую сумму (ACT_COUNT) в матрице, где имена столбцов - ACT_HR, а имена строк - UNIT. Вот как это выглядит при использовании tapply

tapply(byUnitHour$ACT_COUNT, byUnitHour[,1:2], sum)

Наслаждайтесь!

...