【发布时间】:2020-03-26 19:17:08
【问题描述】:
我正在尝试在 R 中重新创建一个数据透视表,我通常在 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
【问题讨论】:
-
如果你制作了一个可重现的例子会更容易一些,但我认为你可以简单地使用:
tapply(byUnitHour$ACT_COUNT,byUnitHour[,1:2],sum)让我知道这是否符合你的需要,我可以正式给出答案。跨度> -
这行得通。我将解决这个问题以使这一点更清楚。谢谢!
-
谢谢。 FWIW,如果您获取数据的标题 (
ex.data<-byUnit[1:25,]),然后使用dput函数,R 将输出一个脚本,允许我们重新创建您的前 25 行。然后我们有一张看起来像你的桌子。dput(ex.data)这可以帮助人们在发布之前测试代码并重新创建您可能遇到的任何错误。
标签: r time pivot-table