首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用R将每小时客运量OD数据转换为od矩阵

如何使用R将每小时客运量OD数据转换为od矩阵
EN

Stack Overflow用户
提问于 2018-10-23 14:47:50
回答 1查看 70关注 0票数 2

我正在尝试将每小时客运量OD数据传输到OD矩阵。

我当前的数据帧如下所示:

代码语言:javascript
复制
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

代码语言:javascript
复制
    A   B   C   D
A       
B   2
C   3   5
D   4   6   1

HOUR = 10

代码语言:javascript
复制
    A   B   C   D
A       
B   4
C   5   1
D   6   2   3

我使用splittable

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

发布于 2018-10-23 15:07:37

您应该使用reshape2中的dcast来代替table。设置drop = F以保持输出矩阵中的所有因子级别。

代码语言:javascript
复制
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

样本数据

代码语言:javascript
复制
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))
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52942778

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档