R语言按id分组后删除各组首次出现sex==2后的多余行如何实现?
问题分析
你提交的代码存在两处核心问题:
- 调用了示例数据中不存在的
type列 silec为拼写错误(应为select),且filter的语法使用不符合dplyr的管道规则,因此无法运行。
正确实现方案
dplyr 版本
逻辑为按id分组后,仅删除紧跟在sex==2之后的连续重复sex==2行,其余行全部保留,完全匹配你提供的预期输出:
library(dplyr) data1 <- data %>% group_by(id) %>% filter(!(sex == 2 & lag(sex, default = 1) == 2)) %>% ungroup()
运行后输出结果如下:
id sex 1 1 1 2 1 1 3 1 2 4 2 1 5 2 1 6 2 1 7 2 2 8 3 1 9 3 1 10 3 2 11 3 1 12 3 1 13 3 2 14 4 1 15 4 2
基础 R 版本(无需加载第三方包)
data1 <- data[ave(data$sex, data$id, FUN = function(x) { !(x == 2 & c(1, x[-length(x)]) == 2) }) == 1, ]
内容的提问来源于stack exchange,提问作者Yebelay Berehan
相关产品推荐
相关产品推荐

