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

如何在R中用dplyr filter仅排除指定chr的pos范围行并保留其他数据

问题描述

现有如下示例数据:

df = data.frame(chr = c(1,1,1,2,2,3,3),
                pos = c(10,15,20,10,14,2,15))

需要使用dplyr的filter()函数实现:仅对chr == 1的行排除pos在1-15范围内的数据,同时保留chr为2、3的所有行。

最初编写的代码如下:

library(dplyr)
filter(df, chr == "1" & !pos %in% (1:15))

但执行后仅保留了chr=1且pos=20的行,丢失了chr为2和3的所有数据:

chr pos
1   20

期望得到的输出为:

chr   pos
1      20
2      10
2      14
3      2
3      15
解决方法

原代码逻辑存在问题:chr == "1" & !pos %in% 1:15的条件仅保留同时满足chr等于1且pos不在1-15的行,直接过滤掉了所有chr不等于1的记录。

要实现需求,需调整条件逻辑,用逻辑或(|)连接两个有效条件:

  1. 所有chr不等于1的行全部保留
  2. chr等于1且pos不在1-15的行保留

对应的正确代码如下:

library(dplyr)
filter(df, chr != 1 | !pos %in% 1:15)

也可以写成更直观的拆分形式,逻辑完全一致:

filter(df, (chr == 1 & !pos %in% 1:15) | chr != 1)

注意:原数据中chr是数值类型,无需加引号写成"1",直接使用数值1即可,避免不必要的类型匹配问题。

执行上述代码后,即可得到符合预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 15:30:55