You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何统计DataFrame1中厂商MAC在DataFrame2中的出现次数

按厂商统计MAC地址在列表中的出现次数(R语言实现)

需求说明

现有两个DataFrame:

  • OUI(对应原DataFrame1):包含MAC(唯一值)和Manufacturer两列,共约4000行
  • Scanning(对应原DataFrame2):仅含MAC列,共约300行,存在重复MAC值

需要统计OUI中每个厂商的MAC地址在Scanning中的出现总次数,包括出现0次的厂商,并按频次降序排序。

示例数据

Scanning <- data.frame(MAC = c("EE-16-17", "EE-16-17",  "AE-04-80", "EE-16-17", "FA-53-17"))
OUI <- data.frame(MAC = c("EE-16-17", "FA-53-17", "FA-B3-17"),
                  Manufacturer = c("Intel", "Apple", "Microsoft"))

解决方案(使用dplyr包)

# 安装并加载dplyr(首次运行需执行安装命令)
# install.packages("dplyr")
library(dplyr)

# 1. 统计Scanning中每个MAC的出现次数
mac_freq <- Scanning %>% count(MAC, name = "occurrences")

# 2. 关联厂商信息,补全0次记录,按厂商汇总并排序
manufacturer_counts <- OUI %>%
  left_join(mac_freq, by = "MAC") %>%
  replace_na(list(occurrences = 0)) %>%
  group_by(Manufacturer) %>%
  summarise(total_occurrences = sum(occurrences)) %>%
  arrange(desc(total_occurrences))

# 查看结构化结果
print(manufacturer_counts)

# 格式化输出为指定文本样式
cat(paste0(manufacturer_counts$Manufacturer, ": ", manufacturer_counts$total_occurrences, "\n"), sep = "")

输出结果

运行上述代码后,格式化输出如下:

Intel: 3
Apple: 1
Microsoft: 0

代码逻辑说明

  • count(MAC):统计Scanning中每个MAC地址的重复次数
  • left_join:保留OUI中所有厂商数据,确保出现0次的厂商不会被遗漏
  • replace_na:将未匹配到的MAC地址次数填充为0
  • group_by + summarise:按厂商分组,汇总该厂商所有MAC地址的总出现次数
  • arrange(desc(total_occurrences)):按总次数降序排序结果

内容的提问来源于stack exchange,提问作者Delpux

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 16:25:38