如何简化R代码,定位数据框中多类别关联的异常条目?
简便解决方案
1. 找出所有关联多个类别的数值对应的条目
用dplyr可以一步筛选出所有res值对应多种var的行,无需多次聚合操作:
library(dplyr) # 筛选出res对应多个var的所有条目 result <- df1 %>% group_by(res) %>% filter(n_distinct(var) > 1) %>% ungroup() print(result)
运行后会直接输出所有res=100的行(该res关联了A、D两个类别)。
2. 精准定位异常条目(如出现次数最少的类别)
如果要直接锁定每个多类别res里的异常项(比如出现次数最少的var),可以在上述基础上增加计数筛选:
# 定位每个多类别res中出现次数最少的异常条目 anomaly <- df1 %>% group_by(res, var) %>% mutate(var_count = n()) %>% # 统计每个res下各var的出现次数 group_by(res) %>% filter(n_distinct(var) > 1, var_count == min(var_count)) %>% # 筛选多类别res中次数最少的var ungroup() %>% select(-var_count) # 去掉临时计数列 print(anomaly)
这段代码会直接输出var=D, res=100的那一行,精准定位目标异常项。
代码逻辑说明
n_distinct(var):统计每个res对应的不同var数量,大于1即说明该res关联了多个类别。- 全程基于原数据框操作,无需生成额外中间数据框,比原代码更简洁高效,且直接返回具体条目。
内容的提问来源于stack exchange,提问作者train sleeper
相关产品推荐
相关产品推荐

