R中使用summarise()计算薪资统计值返回NaN及警告如何解决
问题成因
- 第一个错误是误用
levels()函数:levels()仅对因子类型的变量生效,若你的Salary列是字符类型,levels(Salary)会直接返回空值,传给min()、max()、mean()计算时没有有效输入,就会触发你看到的警告和NaN结果。就算Salary是因子类型,直接对levels()返回的结果做数值转换也无法处理原数据中的£和千位分隔符,依然会生成大量缺失值导致计算失败。 - 第二个错误是未对Salary列做字符清理就直接转数值:原列带有的
£符号、千位分隔符,属于非数字字符,不提前删除的话转数值会直接生成NA,无法参与统计计算。
解决方法
先对Salary列做字符清理、转为数值类型后,再做统计计算,完整代码如下:
library(tidyverse) # 1. 清理Salary列 salaries <- salaries %>% mutate( # 批量移除£符号和千位分隔符逗号,再转换为数值类型 Salary = as.numeric(str_remove_all(Salary, "£|,")) ) # 2. 计算薪资统计值 global_stats <- salaries %>% summarise( mean = mean(Salary, na.rm = TRUE), min = min(Salary, na.rm = TRUE), max = max(Salary, na.rm = TRUE), n = n() )
参数na.rm = TRUE用于跳过清理过程中可能产生的缺失值,避免计算结果出现NA,你也可以在确认数据无缺失的前提下移除该参数。
内容的提问来源于stack exchange,提问作者Sharjeel shahid
相关产品推荐
相关产品推荐

