как использовать R для переноса почасовых данных о пассажирах в матрицу od - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь перенести почасовые данные о пассажирах в матрицу OD.

Мой текущий фрейм данных выглядит примерно так:

Hour  Ostation Dstation  Passengers
8      A       B          2
8      A       C          3
8      A       D          4
8      B       C          5
8      B       D          6
8      C       D          1
10     A       B          4
10     A       C          5 
10     A       D          6 
10     B       C          1
10     B       D          2
10     C       D          3

И я хотел бы получить HOUR = 8:

    A   B   C   D
A       
B   2
C   3   5
D   4   6   1

И HOUR = 10:

    A   B   C   D
A       
B   4
C   5   1
D   6   2   3

Я использую split и table:

ODdata$Ostation <- factor(ODdata$Ostation)
ODdata$Dstation <- factor(ODdata$Dstation)
ODtable <-lapply(split(ODdata, ODdata$Hour), 
                 function(x) table(x$Ostation, x$Dstation))

Я могу получить матрицу OD, нозначение рассчитывается, а не Passengers.

1 Ответ

0 голосов
/ 23 октября 2018

Вы должны использовать dcast из reshape2 вместо table.Установите drop = F, чтобы сохранить все уровни факторов в выходных матрицах.

library(reshape2)
ODtable <-lapply(split(ODdata, ODdata$Hour), 
                 function(x) dcast(Dstation ~ Ostation , data = x, 
                                   value.var = "Passengers", drop = FALSE))
ODtable

#$`8`
#  Dstation  A  B  C  D
#1        A NA NA NA NA
#2        B  2 NA NA NA
#3        C  3  5 NA NA
#4        D  4  6  1 NA
# 
#$`10`
#  Dstation  A  B  C  D
#1        A NA NA NA NA
#2        B  4 NA NA NA
#3        C  5  1 NA NA
#4        D  6  2  3 NA

пример данных

ODdata <- data.frame(Hour = c(rep(8,6), rep(10,6)),
             Ostation = factor(c("A","A","A","B","B","C","A","A","A","B","B","C"),
                                   levels = c('A', 'B', 'C', 'D')),
             Dstation = factor(c("B","C","D","C","D","D","B","C","D","C","D","D"), 
                                   levels = c('A', 'B', 'C', 'D')),
             Passengers = c(2,3,4,5,6,1,4,5,6,1,2,3))
...