У меня большой набор данных о пассажирах на маршруте, подобный следующему:
routes <- c("MEX-GDL", "ACA-MEX", "CUN-MTY", "MTY-CUN", "GDL-MEX", "MEX-ACA")
pax <- sample(100:500, size = 6, replace = T)
traffic <- data.frame(routes = routes, pax = pax)
routes pax
1 MEX-GDL 282
2 ACA-MEX 428
3 CUN-MTY 350
4 MTY-CUN 412
5 GDL-MEX 474
6 MEX-ACA 263
Я хочу сгруппировать рейсы, если пункт отправления и пункт назначения совпадают, чтобы получить общее количество пассажиров в маршруте - например, переименование маршрута MEX-GDL
в GDL-MEX
или наоборот, чтобы затем я мог использовать group_by()
на набор данных.
вроде как:
traffic %>% group_by(routes) %>% summarise(sum(pax))
Я сделал следующее, и это работает, но я считаю, что может быть более эффективный способ решения проблемы (поскольку для его запуска требуется некоторое время):
library(tidyverse)
traffic$routes <- as.character(traffic$routes)
for(route in traffic$routes){
a <- substring(route, first = 1, last = 3)
b <- substring(route, first = 5, last = 7)
aux <- which(sapply(traffic$routes, str_detect, pattern = paste0(b,"-",a)))
traffic$routes[aux] <- paste0(a,"-",b)
}
Есть предложения?
Спасибо за помощь!
Примечание: это мой первый вопрос, поэтому я надеюсь, что выполнил все рекомендации.