如何用dplyr按ID统计去重且排除NA的域名数量?
R dplyr解决方案
通过以下步骤可以快速实现按ID聚合并统计唯一域名数量(排除"na"值):
- 过滤掉域名值为"na"的行
- 按
id分组 - 统计每组内的唯一域名数量
# 加载dplyr包 library(dplyr) # 构造样例数据 sample_data <- tibble( id = c(1,1,1,1,1,2,2,2,3,3,3,3), domain = c("ca", "ca", "com", "na", "com", "org", "na", "ca", "org", "ca", "com", "net") ) # 计算结果 result <- sample_data %>% filter(domain != "na") %>% group_by(id) %>% summarise(count_domain = n_distinct(domain)) # 输出结果 print(result)
运行后会得到与期望一致的输出,该方法支持大规模数据处理,无需手动判断。
Excel解决方案
如果更习惯用Excel处理,有两种高效方法:
方法1:数据透视表法
- 选中包含表头的所有数据区域
- 点击「插入」→「数据透视表」,选择合适的放置位置
- 在数据透视表字段面板中:
- 将
id拖至「行」区域 - 将
domain拖至「值」区域 - 点击值区域的
domain→「值字段设置」,选择「非重复计数」 - 点击数据透视表中
domain的下拉菜单,取消勾选「na」后确定
- 将
方法2:公式法
- 在空白列(如D列)输入
=UNIQUE(A2:A13),提取所有不重复的id - 在D列对应行的右侧(如E2)输入公式:
=SUMPRODUCT((A$2:A$13=D2)*(B$2:B$13<>"na")/COUNTIFS(A$2:A$13,A$2:A$13,B$2:B$13,B$2:B$13)) - 下拉填充公式至所有
id行,即可得到统计结果
内容的提问来源于stack exchange,提问作者Khurram Ahmed
相关产品推荐
相关产品推荐

