r - R - 在列中查找模式并替换它(更有效的解决方案)
问题描述
我每条路线都有大量乘客数据集,类似于以下内容:
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)
}
有什么建议么?
谢谢您的帮助!
注意:这是我在这里的第一个问题,所以我希望我遵守所有准则。
解决方案
我们可以separate
分成两列,按pmax
or分组pmin
,得到sum
library(tidyverse)
traffic %>%
separate(routes, into = c("Col1", "Col2")) %>%
group_by(ColN = pmin(Col1, Col2), ColN2 = pmax(Col1, Col2)) %>%
summarise(Sum = sum(pax))
推荐阅读
- scala - Counting conccurent user sessions by time intervals
- regex - 使用 sed 或 awk 转换键值对
- python - 为什么Flask中的错误“AttributeError:'NoneType'对象没有属性”有时会触发,而不是经常触发?
- python - pandas,matplolib,当我没有最近几天的数据时,如何绘制最近 30 天的空位置图
- c - 在 C 中使用 ## 运算符连接字符串
- python-3.x - cx_freeze 没有名为 os 的模块
- c# - C# - 检测到文件修改
- python-3.x - Python pandas,如何用在另一个数据框中查找的值替换数据框 NA 值?
- google-cloud-platform - 仅将某些文件移动到 GCP 并保留子文件夹
- blazor - 在 Blazor 客户端和 Blazor 服务器之间存储和检索数据