如何统计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地址次数填充为0group_by + summarise:按厂商分组,汇总该厂商所有MAC地址的总出现次数arrange(desc(total_occurrences)):按总次数降序排序结果
内容的提问来源于stack exchange,提问作者Delpux
相关产品推荐
相关产品推荐

