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

如何在R语言中按双规则筛选dataframe并保留指定行?

解决R语言数据分组筛选问题

问题分析

你的代码报错是因为if是标量逻辑判断,但Received_X_after_Y == 1返回的是长度大于1的向量,R无法将其作为if的判断条件;同时直接在管道里用distinct无法区分"有1的ID"和"全0的ID"的不同规则,会导致像ID4这种第一行是0但后面有1的情况被错误保留0值行。

正确实现代码

使用dplyr的分组+条件切片可以完美满足需求:

library(dplyr)

# 加载你的数据集(示例)
dummy <- tibble(
  ID = c(1,1,1,2,2,3,3,4,4),
  Received_X_after_Y = c(1,0,0,1,1,0,0,0,1)
)

# 核心处理逻辑
dummy_one <- dummy %>%
  group_by(ID) %>%
  # 每个组内:如果有1则取第一个1的行,否则取第一行
  slice(if (any(Received_X_after_Y == 1)) which(Received_X_after_Y == 1)[1] else 1) %>%
  ungroup()

代码说明

  • group_by(ID):按ID分组处理每个用户的数据
  • slice():用于选择组内指定位置的行
    • any(Received_X_after_Y == 1):判断当前组是否存在值为1的行
    • which(Received_X_after_Y == 1)[1]:找到组内第一个值为1的行的位置
    • else 1:如果组内全为0,直接取第一行
  • ungroup():取消分组,回到普通数据框结构

运行后得到的结果和你期望的完全一致:

# A tibble: 4 × 2
     ID Received_X_after_Y
  <dbl>              <dbl>
1     1                  1
2     2                  1
3     3                  0
4     4                  1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 15:07:34