首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在按另一列分组的列中查找出现频率最高的前5个名称

如何在按另一列分组的列中查找出现频率最高的前5个名称
EN

Stack Overflow用户
提问于 2020-09-08 15:33:37
回答 2查看 118关注 0票数 1

我正在尝试查找某一列中每个组在另一列中出现次数最多的名称。我是R的新手,正在努力理解其他解决方案是如何实现这一点的(我发现的解决方案似乎解决了上面的第一部分或第二部分)。

数据集的示例如下所示:

代码语言:javascript
运行
复制
Australia City | International City | Port_Region | Airline           | Month_num
"Melbourne"    | "Kular Lumpar"     | "East Asia" | "Air Asia"        | 1 
"Melbourne"    | "Auckland"         | "Oceania"   | "Air New Zealand" | 1
"Melbourne"    | "Auckland"         | "Oceania"   | "Air New Zealand" | 1
"Melbourne"    | "Auckland"         | "Oceania"   | "Air New Zealand" | 2

我正在尝试找到澳大利亚城市每月出现的最多的航空公司,并在抖动图表中显示。

我遇到的问题是按航空公司对航班进行分组,并找到最好的航空公司。

我正在尝试的当前代码是:

代码语言:javascript
运行
复制
sort(table(airlineMelb$Airline),decreasing = TRUE)[1:5]
airlineMelbPop <- c("Air New Zealand", "Air Asia")
  
as.factor(airlineMelbPop) %>%
  ggplot(aes(x=Month_num, y=Port_Region, color=Airline)) +
  labs(title="Most popular airlines per month for Melbourne") +
  geom_jitter()

任何帮助都将不胜感激。

编辑:我现在可以得到以下内容了。这似乎是在正确的轨道上,它显示,例如,'Qantas Airways‘在第9个月有248次。

代码语言:javascript
运行
复制
> dt = as.data.table(airlineMelb)
> dt[, .(nobs = .N), by = .(Australian_City, Month_num, Airline)][order(-nobs)]
     Australian_City Month_num            Airline nobs
  1:       Melbourne         9     Qantas Airways  248
  2:       Melbourne        12     Qantas Airways  242
  3:       Melbourne         3     Qantas Airways  224
  4:       Melbourne         6     Qantas Airways  224
  5:       Melbourne         1     Qantas Airways  195
 ---                                                  
494:       Melbourne         1 SriLankan Airlines    2
495:       Melbourne         1     LATAM Airlines    2
496:       Melbourne         1     Scoot Tigerair    2
497:       Melbourne         1     Japan Airlines    2
498:       Melbourne         1         Air Canada    2

如何将其与ggplot2一起用于绘制每个月的前5家航空公司的图表(上面只显示了5个月?

EN

回答 2

Stack Overflow用户

发布于 2020-09-08 15:59:07

使用data.table,您可以这样做

代码语言:javascript
运行
复制
library(data.table)
dt = as.data.table(airlineMelb)
dt_res = dt[, .(nobs = .N), by = .(city, month, airline)][order(-nobs)]

.N为您提供by中组内的观察次数,并按降序显示每个航空公司、每个城市和每个月的观察次数。

票数 0
EN

Stack Overflow用户

发布于 2020-09-08 16:20:01

您可以使用data.table获取计数,并从排序的计数列中选择5行

代码语言:javascript
运行
复制
library(data.table)
dt=data.table(airlineMelb)
dt[,counts:=sort(.N,descending=T),by=c("Australia City","Month_num","Airline")]

dt_top_5=dt[,.SD[1:5],by=c("Australia City","Month_num","Airline")]

  • 第一个groupby获取每个组中的计数并按降序排序
  • 第二个groupby用于从每个排序的组中提取前5行。
  • 注意,如果特定组的行数少于5行,则将添加一行NA
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63789146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档