如何基于Age列的数值区间删除R语言数据框中的行?
解决R语言数据框筛选的问题
嗨,这个问题我之前也踩过坑~你原来的代码没法正常运行,核心原因是R不支持像数学表达式那样的连续比较写法(25 < x < 30)。这种写法在R里会被错误解析:它会先判断25 < df$Age得到一组TRUE/FALSE的逻辑值,接着把这些逻辑值自动转成1(TRUE)和0(FALSE),再和30做比较,结果完全不是你想要的筛选逻辑。
给你两种靠谱的实现方法,任选其一就行:
方法1:基础R原生写法
把连续比较拆成两个独立条件,用&(逻辑与)连接,再取反就能达到删除目标行的效果:
# 先重现你的原始数据框 df <- read.table(sep="", header=T, text="Name Age Rate Aira 23 90 Ben 32 98 Cat 27 95") # 正确的筛选代码 df <- df[!(df$Age > 25 & df$Age < 30), ]
运行后就能得到你期望的结果:
Name Age Rate 1 Aira 23 90 2 Ben 32 98
方法2:用dplyr包更直观地筛选
如果你习惯用tidyverse工具链,dplyr::filter的写法会更易懂,直接写要保留的条件就行:
library(dplyr) df <- df %>% filter(Age <= 25 | Age >= 30) # 直接保留年龄≤25或≥30的行
这个逻辑和方法1完全等价,结果也一模一样。
另外还可以用dplyr::between函数(注意它是闭区间,所以要调整参数匹配你的需求):
df <- df %>% filter(!between(Age, 26, 29)) # 排除26到29之间的行,和你的需求一致
内容的提问来源于stack exchange,提问作者WoeIs
相关产品推荐
相关产品推荐

