如何在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
相关产品推荐
相关产品推荐

