You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

含缺失值时使用summarize across计算标准误的问题

分组计算标准误时处理缺失值的正确方法

问题场景

需要按Species分组,为多个数值列计算标准误(公式:标准差 / sqrt(观测数)),但数据存在缺失值,导致原代码计算结果为NA,不清楚na.rm=TRUE参数的正确放置位置。

原始数据示例

Species    Trait 1 Trait 2
Species 1      
Species 1      
Species 1      
Species 2
Species 2
Species 2

期望输出

Trait 1_se Trait 2_se
Species 1
Species 2

原可运行但无法处理缺失值的代码

Data_ok %>%
  group_by(Species) %>%
  summarise(across(where(is.numeric), ~ sd(.x)/ sqrt(length(.x)), .names = "{.col}_se"))

解决方案

na.rm=TRUE需要放在sd()函数的参数里,同时要注意:直接用length(.x)会把缺失值计入观测数,导致标准误计算不准确,应该改用sum(!is.na(.x))统计非缺失值的数量。修正后的代码如下:

Data_ok %>%
  group_by(Species) %>%
  summarise(across(where(is.numeric), 
                   ~ sd(.x, na.rm = TRUE) / sqrt(sum(!is.na(.x))), 
                   .names = "{.col}_se"))

关键说明

  1. 在sd(.x, na.rm = TRUE)中添加参数,让标准差计算自动忽略缺失值;
  2. 用sum(!is.na(.x))替代length(.x),确保分母是实际有效观测值的数量,避免缺失值干扰标准误的计算逻辑。

内容的提问来源于stack exchange,提问作者Félix de Tombeur

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 05:14:53