R中使用is.na()清缺失值后空白站点仍居骑行量前6如何解决?
问题排查与修复方案
第一步:修正缺失值校验的目标列
你当前校验缺失值时查询的是end_station_name列,但统计骑行量时分组使用的是start_station_name列,二者不是同一字段,首先校验起始站名称列的缺失情况:
sum(is.na(total_trips_v2$start_station_name))
如果返回结果大于0,说明起始站列本身就存在你之前没清理到的NA值。
第二步:排查非NA类的空白值
站点名称显示为空不代表一定是NA,还可能是空字符串、全空格、不可见控制字符这类情况,执行以下代码排查:
# 排查空字符串数量 sum(total_trips_v2$start_station_name == "", na.rm = TRUE) # 排查全空白字符(包含空格、制表符、换行符等)数量 sum(nchar(trimws(total_trips_v2$start_station_name)) == 0, na.rm = TRUE)
第三步:修正统计代码的逻辑错误
你当前的分组代码存在逻辑问题:group_by(member_casual="casual", start_station_name)的写法会直接将整个数据集的member_casual列全部赋值为casual再分组,而非筛选出 casual 用户统计。正确的统计代码应该先筛选再分组:
top_5_start_stations <- total_trips_v2 %>% # 先筛选 casual 用户,不要在group_by中做赋值操作 filter(member_casual == "casual") %>% group_by(start_station_name) %>% summarize(number_of_rides = n(), .groups = "drop") %>% arrange(desc(number_of_rides)) %>% head(6)
第四步:修复空白站点问题
排查出空白站点记录后,可以选择两种处理方式:
- 直接过滤无效记录:
total_trips_v2_clean <- total_trips_v2 %>% filter( !is.na(start_station_name), nchar(trimws(start_station_name)) > 0 )
- 统一标记为未知站点保留:
total_trips_v2 <- total_trips_v2 %>% mutate( start_station_name = case_when( is.na(start_station_name) | nchar(trimws(start_station_name)) == 0 ~ "未知站点", TRUE ~ start_station_name ) )
内容的提问来源于stack exchange,提问作者Sarthak Dev
相关产品推荐
相关产品推荐

