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

R语言如何删除数据框中后行同为FAILURE的指定行

R语言实现指定列连续FAILURE行过滤

核心判断逻辑

要删除「取值为"FAILURE"且下一行同样为"FAILURE"」的行,核心是构造和目标列等长的下一行取值向量:把目标列整体向前偏移一位,最后一位填充非"FAILURE"的占位值,逐行做逻辑判断即可。
连续多个"FAILURE"的场景下,这个逻辑会自动保留连续段最后一个"FAILURE"(因为它的下一行是"HIT",不满足删除条件),和给出的预期输出完全匹配。

代码实现

1. 原始向量效果验证

# 输入原始序列
raw_vec <- c("FAILURE", "HIT", "FAILURE", "HIT", "FAILURE", "HIT", "FAILURE", "HIT", "FAILURE", "HIT", 
             "FAILURE", "HIT", "FAILURE", "FAILURE", "HIT", "FAILURE", "FAILURE", "HIT", "FAILURE", 
             "HIT", "FAILURE", "FAILURE", "FAILURE", "HIT", "FAILURE", "HIT", "FAILURE", "HIT",    
             "FAILURE", "HIT", "FAILURE", "FAILURE", "FAILURE", "HIT")

# 构造下一行取值向量,最后一位填充非FAILURE占位值,避免最后一行被误删
next_val <- c(raw_vec[-1], "END")
# 过滤掉符合删除条件的条目
result_vec <- raw_vec[!(raw_vec == "FAILURE" & next_val == "FAILURE")]

运行后result_vec的输出和预期序列完全一致。

2. 数据框场景:基础R实现

假设数据框名为df,需要过滤的目标列名为status:

# 新增临时列存储下一行的取值
df$next_status <- c(df$status[-1], "")
# 执行行过滤
df_filtered <- df[!(df$status == "FAILURE" & df$next_status == "FAILURE"), ]
# 删除临时列
df_filtered$next_status <- NULL

3. 数据框场景:dplyr实现

如果使用tidyverse生态的dplyr包,可以用lead()函数直接取后行值,写法更简洁:

library(dplyr)

df_filtered <- df %>%
  # lead()取后一行值,最后一行用空字符串作为默认值
  mutate(next_status = lead(status, default = "")) %>%
  # 过滤掉符合删除条件的行
  filter(!(status == "FAILURE" & next_status == "FAILURE")) %>%
  # 移除临时构造的列
  select(-next_status)

注意事项

  • 最后一行的下一行占位值不要设为"FAILURE",否则最后一行如果是"FAILURE"会被误删
  • 该逻辑为向量化运算,执行效率很高,即使是百万行级别的数据也能快速处理

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 22:39:12