我正在尝试将每小时客运量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。
发布于 2018-10-23 15:07:37
您应该使用reshape2中的dcast来代替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))https://stackoverflow.com/questions/52942778
复制相似问题