R 入门:过滤缺失时长并计算有效记录均值
在数值向量中区分 NA、负数和合法零,通过显式筛选计算总和与均值,避免缺失值传播影响统计。
本节目标
在数值向量中区分 NA、负数和合法零,通过显式筛选计算总和与均值,避免缺失值传播影响统计。
环境与运行方法
准备 R 4.x,保存为 lesson.R,执行 Rscript lesson.R。只使用基础 R,不安装 tidyverse。示例用 cat 固定输出格式,便于直接核对结果。
核心思路
NA 表示缺失,不等于零。直接对含 NA 的向量求和或平均会传播缺失。先定义哪些记录有效,再筛选,比在所有函数里机械加 na.rm 更清楚。
完整示例
records <- c(20, NA_real_, -5, 35, 0)
valid <- records[!is.na(records) & records >= 0]
cat("valid=", length(valid), " total=", sum(valid), "\n", sep="")
cat("mean=", mean(valid), "\n", sep="")
empty <- numeric(0)
cat("empty_count=", length(empty), "\n", sep="")预期输出
valid=3 total=55
mean=18.33333
empty_count=0逐步理解
is.na 检查缺失,非负条件表达业务有效性。两者组合后,20、35、0 保留,均值分母为三,不是全部五条,也不是只有正数的两条。
均值的显示精度与数值内部精度不同,cat 的结果会受到显示参数影响。本例使用默认环境。空数值向量的 sum 为零,但 mean 会得到 NaN;界面应先检查数量,再决定显示暂无数据或其他明确提示。
常见问题与边界
- 不能用 records==NA 判断缺失。
- na.rm 只处理缺失,不会替你过滤负值。
- 向量逻辑与标量逻辑运算符用途不同。
动手练习
把输入改为 c(0,0),再改为全 NA。
参考答案
两个零得到两条有效记录,均值零;全缺失得到空有效向量,不能把它的均值当成真实零。应先检查 length(valid) 是否为零。
文章回复
0 条公开回复