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

如何用data.table筛选符合条件的行,组内无符合条件则取首行?

基于data.table的分组行筛选实现

需求概述

  • 从大规模数据集中筛选出monthX列值>0的行
  • 若某个按ID分组的组内无满足条件的行,则保留该组的第一行
  • 最终每个ID仅保留一行记录

示例代码与数据

library(data.table)

# 构造示例数据
df1 <- data.frame(
  ID = c(rep(1,3), rep(2,3), rep(3,4)),
  Mo = c(1:3, 1:3, 1:4),
  stX = c("NA", "X", "X", "NA", "NA", "NA", "NA", "X", "NA", "NA")
)

df2 <- df1
# 转换为data.table并执行分组处理
df2 <- setDT(df2)[, firstX := +(.I == .I[stX == 'X'][1]), by = ID][
  , monthX := ifelse(firstX == 1, Mo, 0)
]

代码解析

  • 先将普通数据框转换为data.table格式,借助其高效的分组运算能力适配大规模数据集
  • 按ID分组后,标记每组中第一个stX等于X的行(firstX列赋值为1,其余行赋值为0)
  • 通过monthX列生成筛选标记:firstX为1的行保留Mo的值,其余行赋值为0。后续可通过monthX > 0筛选目标行,对无符合条件行的分组,直接保留该组第一行即可满足需求

内容的提问来源于stack exchange,提问作者Village.Idyot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 04:10:00