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

如何高效筛选data.table中至少包含一个负值的行并生成新data.table

筛选data.table中含至少一个负值的行

针对你的需求——从包含大量Stage列的data.table中提取所有至少有一个负值的完整行,这里有个高效且简洁的解决方案,完美适配你的大数据集场景:

代码实现

library(data.table)

# 你的示例数据
dt <- data.table( ID = c(42, 43, 44), Stage_1 = c(-6, 7, 4), Stage_2 = c(-15, 4, -8), Stage_3 = c(-20, 2, -5) )

# 核心筛选逻辑
dt2 <- dt[rowSums(.SD < 0) > 0, , .SDcols = patterns("^Stage_")]

为什么这么写?

  • .SDcols = patterns("^Stage_"):自动匹配所有以Stage_开头的列,不用手动输入50个列名,省时间还避免出错
  • rowSums(.SD < 0):用向量化的方式快速计算每行里负值的个数,比逐行遍历的apply效率高得多,处理大数据集时优势明显
  • rowSums(...) > 0:只保留负值数量大于0的行,也就是至少有一个负值的完整行

验证结果

运行后你会得到期望的输出:

> dt2
   ID Stage_1 Stage_2 Stage_3
1: 42      -6     -15     -20
2: 44       4      -8      -5

如果你的Stage列命名规则不同,只需要调整patterns里的正则表达式就行(比如如果列名是S1、S2,就改成patterns("^S"))。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 07:32:31