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

使用tidyverse筛选PAN列同时含YES和NO的ID对应行

筛选同时包含PAN列YES和NO的ID对应的所有行

需求说明

从包含ID和PAN列的数据框df1中,仅保留那些在PAN列同时存在"YES"和"NO"取值的ID对应的所有行(即示例中的ID 1、2、5的全部记录)。


方法1:Base R 原生实现

无需额外包,用原生函数即可完成:

# 第一步:筛选出符合条件的ID(同时包含YES和NO的ID)
valid_ids <- unique(df1$ID[ave(df1$PAN, df1$ID, FUN = function(x) length(unique(x))) == 2])

# 第二步:提取对应ID的所有行
result <- df1[df1$ID %in% valid_ids, ]

逻辑说明:

  • ave()按ID分组,计算每个分组内PAN的唯一值数量
  • 筛选出唯一值数量为2的ID,再通过%in%提取这些ID的全部行

方法2:dplyr 包实现(tidyverse 风格)

如果习惯使用tidyverse生态,代码更简洁直观:

library(dplyr)

result <- df1 %>%
  group_by(ID) %>%          # 按ID分组
  filter(n_distinct(PAN) == 2) %>%  # 保留分组内PAN有2种取值的行
  ungroup()                 # 取消分组

逻辑说明:

  • group_by(ID)按ID分组后,n_distinct(PAN)统计每组内PAN的唯一值数量
  • 直接筛选出唯一值数量为2的分组的所有行,无需额外提取ID的步骤

运行结果

两种方法得到的result均为:

ID PAN
1  1  NO
2  1 YES
3  2 YES
4  2  NO
5  5  NO
6  5 YES

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 12:42:31