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

在R语言中筛选特定ID:无sup状态且类型切换分析

R语言数据筛选分步实现

需求说明

需要完成两项数据筛选任务:

  1. 筛选所有在type为N时从未出现status为sup的ID,即仅保留type=N阶段status只有unsup或NA的ID对应的所有数据
  2. 从第一步筛选结果中,进一步筛选出存在从type=N切换到type=P的ID数据

样本数据

data <- data.frame(
  id = c(1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,6,6,6,6,6,7,7,7),
  type = c('N','N','N', 'N', 'P','P','N','N','N', 'I', 'I','N','N','N', 'N', 'N','N','N','N', 'O', 'O','N','N','N', 'O','N','N','N', 'P', 'P', 'N','N','P'), 
  status = c(NA,'unsup',NA,'unsup',NA,'sup',NA,NA,'sup',NA,'sup','unsup',NA,'unsup',NA, 'unsup','unsup',NA,'unsup',NA,'sup','sup',NA,NA,'unsup',NA,'unsup','unsup','unsup','sup', NA, NA, 'sup')
)

分步实现(使用dplyr包)

首先加载dplyr包:

library(dplyr)

第一步:筛选type=N时无sup记录的ID

# 第一步筛选结果
step1_result <- data %>%
  group_by(id) %>%
  # 确保该ID所有type=N的记录中,status都不是sup
  filter(all(!(type == 'N' & status == 'sup'))) %>%
  ungroup()

预期第一步结果:排除id=2、5、7,保留id=1、3、4、6的所有数据

第二步:筛选存在N→P切换的ID

# 第二步筛选结果
step2_result <- step1_result %>%
  group_by(id) %>%
  # 筛选同时存在type=N和type=P的ID(即有切换到P的记录)
  filter(any(type == 'N') & any(type == 'P')) %>%
  ungroup()

预期第二步结果:仅保留id=1、6的所有数据

结果验证

查看最终结果的ID记录:

  • id=1:先有N类型记录(status均为unsup/NA),后切换到P类型,符合要求
  • id=6:先有N类型记录(status均为unsup/NA),后切换到P类型,符合要求
  • id=3:只有N类型记录,无切换到P的操作,被排除
  • id=4:从N切换到O,无P类型记录,被排除

内容的提问来源于stack exchange,提问作者Mahlet Tadesse

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 03:10:35