r - 如何使用 R 将每小时乘客 OD 数据传输到 od 矩阵
问题描述
我正在尝试将每小时的乘客 OD 数据传输到 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
.
解决方案
您应该使用dcast
fromreshape2
代替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))
推荐阅读
- c# - 当您的基本模型不是列表类型时,如何在 ASP.NET MVC 中编写列表?
- visual-studio-code - VSCode 调试器存在字符编码问题
- c++ - VS Code G++ 智能感知设置不起作用且编译器未运行完成
- kubernetes - 如何通过单个 IP 访问 Kubernetes pod?
- spring-cloud-gateway - 调用发生时Spring Cloud Gateway uri 413太大
- c# - 为什么 .NET CLR 不能正确内联它?
- python - 更新表中的条目 - Python
- mongodb - MongoDB (v. 3.6.8):尽管事先工作,程序在全局初始化中失败
- powershell - 当 PowerShell\7\ 环境路径变量位于 PowerShell\v1.0\ 之前时,Ansible Playbooks 不会运行
- angular - MSAL2 和 .Net 5,调用服务器 WebApi 时不断收到 401