用于显示名册数据框的类似日历的视图

时间:2017-03-20 13:27:32

标签: r

我有一个班次计划数据框,每个员工每天包含一行,如下所示:

day<-as.Date(c('2017-04-03','2017-04-04','2017-04-05', '2017-04-06',
    '2017-04-07', '2017-04-08', '2017-04-09', '2017-04-03', 
    '2017-04-04', '2017-04-05', '2017-04-06', '2017-04-07', 
    '2017-04-08', '2017-04-09', '2017-04-03','2017-04-04','2017-04-05', 
    '2017-04-06', '2017-04-07', '2017-04-08', '2017-04-09'))
employee<-c('John Doe', 'John Doe', 'John Doe', 'John Doe', 'John Doe', 'John Doe', 'John Doe', 
          'Martin Maw', 'Martin Maw', 'Martin Maw', 'Martin Maw', 'Martin Maw', 'Martin Maw', 'Martin Maw', 
          'Denis Rudy', 'Denis Rudy', 'Denis Rudy', 'Denis Rudy', 'Denis Rudy', 'Denis Rudy', 'Denis Rudy')
shift<-as.factor(c('D', 'D', 'N', 'N', 'R', '-', 'D', 'N', 'R', 
             '-', '-', '-', 'N', 'N', '-', '-', '-', 'D', 'D', 'D', '-'))
roster<-data.frame(day, employee, shift)

这就是我要找的:

employee   03  04  05  06  07  08  09
John Doe    D   D   N   R   -   -   D
Martin Maw  N   R   -   -   -   N   N
Denis Rudy  -   -   -   D   D   D   -

是否有一个软件包可以帮助我做这样的报告,比如查看数据框?

How to reshape data from long to wide format?

显示了解决方案,但给出了难以找到的问题的不同表述。

1 个答案:

答案 0 :(得分:1)

使用tidyr我们可以spread data.frame:

library(tidyr)

roster %>% 
    spread(key = day, value = shift) 

##     employee 2017-04-03 2017-04-04 2017-04-05 2017-04-06 2017-04-07
## 1 Denis Rudy          -          -          -          D          D
## 2   John Doe          D          D          N          N          R
## 3 Martin Maw          N          R          -          -          -
##   2017-04-08 2017-04-09
## 1          D          -
## 2          -          D
## 3          N          N

数据:

day<-as.Date(c('2017-04-03','2017-04-04','2017-04-05', '2017-04-06', '2017-04-07', '2017-04-08', '2017-04-09', '2017-04-03','2017-04-04','2017-04-05', '2017-04-06', '2017-04-07', '2017-04-08', '2017-04-09', '2017-04-03','2017-04-04','2017-04-05', '2017-04-06', '2017-04-07', '2017-04-08', '2017-04-09'))
employee<-c('John Doe', 'John Doe', 'John Doe', 'John Doe', 'John Doe', 'John Doe', 'John Doe', 'Martin Maw', 'Martin Maw', 'Martin Maw', 'Martin Maw', 'Martin Maw', 'Martin Maw', 'Martin Maw', 'Denis Rudy', 'Denis Rudy', 'Denis Rudy', 'Denis Rudy', 'Denis Rudy', 'Denis Rudy', 'Denis Rudy')
shift<- as.factor(c('D', 'D', 'N', 'N', 'R', '-', 'D', 'N', 'R', '-', '-', '-', 'N', 'N', '-', '-', '-', 'D', 'D', 'D', '-'))
roster<-data.frame(day, employee, shift)