У меня есть набор данных, образец которого может быть представлен ниже:
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)
- person gsun   schedule 08.02.2017