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

R语言dataframe操作:删除delivery=0且下一行delivery=1的对应行

# 补全后的完整原始数据
df <- data.frame(
  client_id = c(7, 7, 7, 17, 17, 17, 19, 19, 19,19,19), 
  delivery = c(0,0,1,0,0,1,0,0,1,1,1), 
  order_id = c("snshw","nsnsjjw","smssjjw","jsnn","ksksues","ncbf","nsngw","manhsm","opltkg","snsjue","msmssje"), 
  which_order = c(1, 2, 3, 1, 2, 3, 1, 2, 3, 4, 5)
)

方案1:dplyr实现(逻辑清晰易读)

核心用lead()函数取当前行的下一行delivery值做判断,默认按client_id分组处理避免跨用户的相邻行判断错误:

library(dplyr)

df_result <- df %>%
  group_by(client_id) %>%
  # 过滤掉"当前delivery为0且下一行delivery为1"的行,默认最后一行下一行值设为0避免误删
  filter(!(delivery == 0 & lead(delivery, default = 0) == 1)) %>%
  ungroup()

如果确认不需要严格按client_id分组,直接删掉group_by(client_id)和对应的ungroup()行即可,逻辑同样生效,执行结果和你给出的预期完全一致。

方案2:base R实现(无需加载第三方包)

用ave()函数按client_id分组做条件判断:

# 生成标记列:TRUE代表需要删除的行
df$to_drop <- ave(df$delivery, df$client_id, FUN = function(x) {
  x == 0 & c(tail(x, -1), 0) == 1
})

df_result <- df[df$to_drop == FALSE, setdiff(names(df), "to_drop")]

内容的提问来源于stack exchange,提问作者Zofia Smoleń

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 08:18:04