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

R语言按分组标记存在非连续present值的分组的实现方法

实现方案

核心判断逻辑:对每个分组,提取所有status为present对应的bin值,若「最大bin值 - 最小bin值 + 1」不等于present的总数量,说明present的bin不连续。如果分组内无present记录,可根据业务需求调整返回值,以下代码默认无present时标记为不连续,可自行修改逻辑。


前置准备

首先加载依赖包并构造示例数据:

library(dplyr)

# 示例数据
x_df <- data.frame(
  group = c(rep("A",4),rep("B", 5), rep("C",4)),
  bin = c(1,2,3,4,1,2,3,4,5,1,2,3,4),
  status = c("absent", "present", "absent", "present", "absent", "present", "present", "absent", "absent", "absent", "absent", "present", "present")
)

三种输出形式实现

1. 原数据框新增分组标记列

属于present不连续分组的所有行flag均标记为TRUE:

res1 <- x_df %>%
  group_by(group) %>%
  mutate(flag = {
    pres_bin <- bin[status == "present"]
    length(pres_bin) == 0 || (max(pres_bin) - min(pres_bin) + 1) != length(pres_bin)
  }) %>%
  ungroup()

2. 生成分组级汇总标记表

每个分组对应一行,标记该组是否符合present不连续的条件:

res2 <- x_df %>%
  group_by(group) %>%
  summarise(present_discontinuous = {
    pres_bin <- bin[status == "present"]
    length(pres_bin) == 0 || (max(pres_bin) - min(pres_bin) + 1) != length(pres_bin)
  })

3. 直接返回符合条件的分组名向量

res3 <- x_df %>%
  group_by(group) %>%
  summarise(is_dis = {
    pres_bin <- bin[status == "present"]
    length(pres_bin) == 0 || (max(pres_bin) - min(pres_bin) + 1) != length(pres_bin)
  }) %>%
  filter(is_dis) %>%
  pull(group)

示例数据运行后返回结果为 "A"。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 21:48:03