【发布时间】:2017-06-25 08:54:24
【问题描述】:
我有一个数据集,其中的一个样本可以用以下方式表示:
ORIGIN <- c("SFO", "BOS", "LAX", "BOS")
DEST <- c("BOS", "SFO", "BOS", "LAX")
PASS<- c(100,50,20,40)
df = data.frame(ORIGIN, DEST, ROUTE, PASS)
ORIGIN DEST PASS
SFO BOS 100
BOS SFO 50
LAX BOS 20
BOS LAX 40
我正在尝试将 ORIGIN 和 DEST 组合在一起以形成 ROUTE,然后按路线聚合行,而不考虑起点或目的地,以获得总乘客人数。
理想情况下,我想要以下内容:
ROUTE PASS
SFO-BOS 150
LAX-BOS 60
我不关心哪个路由命名度量占主导地位,只要我能将它们结合起来。
作为第一步,我使用了这个:
df$ROUTE<-paste(df$ORIGIN, df$DEST, sep="-")
获取以下信息:
ORIGIN DEST ROUTE PASS
SFO BOS SFO-BOS 100
BOS SFO BOS-SFO 50
LAX BOS LAX-BOS 20
BOS LAX BOS-LAX 40
但是,虽然我通常会使用 ddply 之类的东西来获取乘客总和,但我不确定如何继续,因为我正在尝试结合“BOS-SFO”和“SFO-BOS”。
这在小文件中不是问题,但我正在使用的文件太大。
有人可以帮忙吗?
【问题讨论】:
-
你的
paste()还是可以的,但是需要先对路由进行排序,paste(apply(df[,1:2],1,max),apply(df[,1:2],1,min),sep="-")然后就可以简单的按路由聚合aggregate(PASS ~ ROUTE, data=df, sum)