R语言:Text_General_Code变量归为大类失败,Category列现NA问题求助
解决R中分类变量归组出现NA及多余变量的问题
嘿,我看你在给Text_General_Code归组到Category时遇到了NA值的问题,而且报告里还多出了不少不需要的变量,这就帮你梳理下问题和解决办法:
问题根源分析
- 未初始化
Category变量:你直接给匹配到的行赋值Category,但没匹配到的行就会默认是NA,不会自动归到"Others"。 - 条件里的错误:你写的
pdx$Type == "KIDNAPPING"用错了变量(应该是Text_General_Code),还有NON - CRIMINAL的空格可能和原始数据里的格式不一致,另外说不定还有一些Text_General_Code的类别没被你写到条件里。 - 未清理多余变量:你注释掉了
select命令,导致原始数据里的很多变量都被保留下来,所以报告里变量数量超标。
分步解决方案
1. 用更高效的方式创建Category(避免NA)
推荐用dplyr的case_when,代码更整洁,还能自动兜底所有未匹配的类别为"Others",不会出现NA:
library(dplyr) pdx <- pdx %>% mutate(Category = case_when( # 归组Theft类 Text_General_Code %in% c("THEFT", "MOTOR VEHICLE THEFT") ~ "Theft", # 归组Battery类 Text_General_Code == "BATTERY" ~ "Battery", # 归组Criminal damage类 Text_General_Code == "CRIMINAL DAMAGE" ~ "Criminal damage", # 归组Narcotics类 Text_General_Code %in% c("NARCOTICS", "OTHER NARCOTIC VIOLATION") ~ "Narcotics", # 归组Assault类 Text_General_Code == "ASSAULT" ~ "Assault", # 归组Burglary类 Text_General_Code == "BURGLARY" ~ "Burglary", # 归组Robbery类 Text_General_Code == "ROBBERY" ~ "Robbery", # 所有未匹配的都归为Others TRUE ~ "Others" ))
2. 检查是否有遗漏的类别
如果还是担心有没覆盖到的Text_General_Code,可以先查看所有唯一值,确认你的条件都覆盖到了:
# 查看Text_General_Code的所有唯一值 unique(pdx$Text_General_Code)
3. 清理多余变量
把你不需要的变量删掉,只保留分析需要的,比如:
pdx <- pdx %>% # 这里保留你需要的变量,比如District、Category、Year、Count等,根据需求调整 select(District, Text_General_Code, Category, Year, Count, Dispatch_Date)
4. 验证结果
运行完后可以检查Category的分类情况,确认没有NA且只有你想要的8个类别:
# 查看各类别的数量分布 table(pdx$Category) # 检查是否有NA值 sum(is.na(pdx$Category))
针对大数据集的小提示
你的数据集有230万条记录,用dplyr的函数会比基础R的循环/逐个赋值更高效,能节省不少运行时间哦。
内容的提问来源于stack exchange,提问作者Barrington
相关产品推荐
相关产品推荐

