使用R统计数据集25岁及以下乘客数结果为0的问题排查
问题描述
统计数据集people中年龄在25岁及以下的乘客总人数,统计过程要求使用PERSON_TYPE和AGE两个字段完成。
运行代码
library(tidyverse) people %>% filter( AGE <= 25 & PERSON_TYPE == "PASSENGERS") %>% count()
异常表现
上述代码运行后返回的计数结果为0,且其他同类型的字段计数统计代码运行后也均返回0结果,和数据实际分布预期不符。
异常原因与排查方法
- 优先排查分类字段值匹配错误:
PERSON_TYPE为分类字段,90%以上的同类0结果问题都是硬编码的匹配值和字段实际取值不匹配导致的,常见不匹配场景包括:实际值为小写格式passengers、值前后带多余空格" PASSENGERS "、为单数形式"PASSENGER"、首字母大写格式"Passengers"、甚至是数字编码而非字符串。直接运行people %>% count(PERSON_TYPE, sort = TRUE)即可查看该字段所有唯一取值和对应计数,找到代表乘客的真实取值后替换过滤条件中的匹配内容即可。 - 排查
AGE字段格式异常:运行summary(people$AGE)查看字段类型和值分布,如果AGE是字符类型而非数值类型,<= 25的数值比较逻辑会直接失效,需要先通过mutate(AGE = as.numeric(AGE))转换类型后再做过滤;如果字段值带非数字字符(比如值为"24岁"这类带单位的格式),需要先提取字符串中的数字部分再做类型转换;另外如果字段存在大量NA缺失值,也会被过滤条件直接排除,需要确认缺失值占比是否符合预期。 - 排查字段名拼写错误:运行
colnames(people)查看数据集所有字段名,确认是否存在大小写不一致(比如实际字段名为小写age、person_type)、字段名带多余空格或后缀的情况,字段名拼写错误会导致R识别不到对应列,过滤逻辑失效。 - 排查数据集读入异常:先运行
nrow(people)确认数据集本身是不是空对象、有没有读入报错,再运行head(people)查看前几行数据,确认数据内容是否和预期一致。
内容的提问来源于stack exchange,提问作者Jessica Amey
相关产品推荐
相关产品推荐

