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

如何使用ifelse语句过滤Age为0时重复测量的首行数据

问题描述

我有一个DataFrame(df),数据如下:

IDAgeMeasurement
1123.5
1224.5
1325.0
2010.0
2011.5
2123.5
2225.5
309.5
3120.0
4010.5
4011.0
4123.5
4226.5
4327.5

我的需求是:当Age为0且存在重复的Age=0的测量记录时,过滤掉该组中的第一个测量行。

我尝试了以下代码,但不知道如何正确实现:

df %>%
ifelse(Age == 0, lead(Age) == 0, slice(-1), *Do nothing*)
解决方案

可以通过分组标记的方式精准过滤目标行,具体代码如下:

library(dplyr)

df_filtered <- df %>%
  # 按ID和Age分组,锁定每个ID下Age=0的重复组
  group_by(ID, Age) %>%
  # 生成组内行数和行号两个临时辅助列
  mutate(
    group_count = n(),
    row_in_group = row_number()
  ) %>%
  # 过滤规则:保留非Age=0的行,或Age=0但组内仅一行的行,或Age=0但不是组内第一行的行
  filter(
    Age != 0 | 
    (Age == 0 & group_count == 1) | 
    (Age == 0 & row_in_group != 1)
  ) %>%
  # 移除临时辅助列,还原原数据结构
  select(-group_count, -row_in_group) %>%
  ungroup()

代码说明

  • group_by(ID, Age):确保我们只针对同一ID下的同一年龄组做判断,避免跨ID干扰
  • mutate生成的两个列:group_count用来判断该Age=0组是否有重复记录,row_in_group用来定位组内的第一行
  • filter条件精准匹配需求,只剔除那些"属于重复Age=0组的第一行"
  • 最后移除临时列,得到干净的过滤后数据

执行后,ID=2和ID=4中Age=0的第一行会被剔除,ID=3中唯一的Age=0行会保留,其余非Age=0的行全部保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 03:11:50