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

如何用dplyr在R中筛选所有X列首次出现非零值后的行

使用dplyr筛选X1首次出现非零值后的所有行

首先构造你的示例数据:

library(dplyr)

df <- tibble(
  date = c("1/1", "2/1", "3/1", "4/1", "5/1", "6/1", "7/1"),
  X1 = c(0, 0, 0, 25, 35, 4, 0),
  X2 = c(3, 7, 13, 4, 0, 6, 0),
  X3 = c(34, 65, 0, 65, 0, 9, 0)
)

核心解决方案

利用cumany()函数实现“首次满足条件后保留所有后续行”的逻辑:

df %>%
  filter(cumany(X1 != 0))

结果输出

执行后会得到你需要的行:

dateX1X2X3
4/125465
5/13500
6/1469
7/1000

逻辑说明

  • X1 != 0:判断每行的X1是否为非零值
  • cumany():累积判断,一旦某行满足X1 != 0,后续所有行都会返回TRUE,从而被筛选保留

扩展:适配所有X列的情况

如果你的需求是任意X列首次出现非零值后保留所有行(可作为通用场景参考),可以用starts_with("X")匹配所有X开头的列:

df %>%
  filter(cumany(if_any(starts_with("X"), ~ .x != 0)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:43:33