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

在R的dplyr中计算Z分数时如何忽略NA值?

解决方法

问题出在mean()和sd()函数默认不会忽略NA值,只要在这两个函数中添加na.rm = TRUE参数,就能跳过NA计算均值和标准差,进而得到正确的Z分数。

修改后的代码如下:

library(tidyverse)
data <- structure(list(Date = structure(c(18262, 18293, 18322, 18353), class = "Date"), 
    a = c(NA, 1, 2, 3), b = c(NA, NA, 3, 5), c = c(NA, NA, NA, 
    4)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-4L))

data %>% 
  mutate_if(is.numeric, .funs = ~(. - mean(., na.rm = TRUE))/sd(., na.rm = TRUE))

运行结果:

# A tibble: 4 × 4
  Date           a     b     c
  <date>     <dbl> <dbl> <dbl>
1 2020-01-01    NA    NA    NA
2 2020-02-01  -1    NA    NA
3 2020-03-01   0     -1    NA
4 2020-04-01   1      1     NA

如果使用的是较新版本的tidyverse,推荐用mutate(across())替代已软弃用的mutate_if(),语法更符合tidyverse最新规范:

data %>% 
  mutate(across(where(is.numeric), ~(. - mean(., na.rm = TRUE))/sd(., na.rm = TRUE)))

内容的提问来源于stack exchange,提问作者Tanga94

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 14:50:45