如何通过多组列值配对条件过滤R语言数据框中的对应行
实现方案
两种简洁的实现方式,都可以精准匹配infant值与region的组合,不会误筛同值不同地区的行:
方案1:tidyverse 半连接(可读性最高)
利用semi_join仅保留左表与右表指定字段完全匹配的行的特性,一步完成筛选:
library(dplyr) # 构造异常值-地区配对表 outlier_pairs <- tibble( infant = out$out, region = out$names[out$group] ) # 半连接筛选后提取行名 outlier_rows <- df %>% rownames_to_column("row_name") %>% semi_join(outlier_pairs, by = c("infant", "region")) %>% pull(row_name)
方案2:Base R 零依赖
用interaction将两个字段拼接为组合键后匹配,不需要额外安装包:
# 生成异常值组合键 outlier_keys <- interaction(out$names[out$group], out$out) # 匹配原表组合键后提取行名 outlier_rows <- rownames(df)[interaction(df$region, df$infant) %in% outlier_keys]
注意事项
如果infant是浮点型数值,为了避免精度问题导致匹配失败,可以先把两个表的infant字段统一保留相同小数位后再匹配,比如用round(infant, 1)处理。
内容的提问来源于stack exchange,提问作者Dominique Paul
相关产品推荐
相关产品推荐

