如何在R语言中筛选年龄介于25至29之间的数据子集?
解决R中筛选年龄子集的问题
别担心,这是新手常犯的小错误,我来一步步帮你修正!
你的代码有两个关键问题导致结果不符合预期:
- 逻辑运算符用反了:你用了
|(逻辑“或”),这会筛选出年龄小于25或者大于29的样本,正好和你想要的25-29区间相反;应该用&(逻辑“且”)来同时满足两个条件。 - 年龄的类型与比较方式错误:你把25和29用单引号括起来当成字符串比较了,如果你的
A_AGE字段是数值型,这样的写法会触发类型转换错误;如果是字符型,字符串的比较逻辑和数值完全不同(比如字符'100'会被认为小于'29',因为第一个字符'1'比'2'小),结果肯定不对。
正确的解决方法
首先确保你的年龄字段是数值型(如果原本是字符型,先转换),然后用正确的筛选逻辑:
方法1:使用逻辑“且”运算符
# 先将A_AGE转换为数值型(如果当前是字符类型) cps_single$A_AGE <- as.numeric(cps_single$A_AGE) # 筛选25到29之间(包含25和29)的样本 cps_single_20s <- cps_single %>% filter(A_AGE >= 25 & A_AGE <= 29)
方法2:使用dplyr的between()函数(更简洁)
dplyr提供了专门的区间筛选函数,代码更易读:
cps_single$A_AGE <- as.numeric(cps_single$A_AGE) cps_single_20s <- cps_single %>% filter(between(A_AGE, 25, 29))
如果你的A_AGE原本就是数值型,那可以跳过转换的步骤直接筛选。
内容的提问来源于stack exchange,提问作者esvadude




