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

如何在dplyr中忽略缺失值且不删除行,完成数据标准化?

解决含NA列的标准化问题

你遇到的核心问题是mean()和sd()默认不会忽略NA值,而且你把na.rm=TRUE放错了位置——它应该传给mean()和sd()内部,而不是mutate()的参数。下面是两种可行的解决方法:

方法一:自定义函数中添加na.rm=TRUE

直接在计算均值和标准差时指定忽略NA,既能保留原数据中的NA位置,又能正常计算非NA值的标准化结果:

df1 = df1 %>% 
  mutate(across(.cols = A:C,
                .f = function(x){(x - mean(x, na.rm = TRUE)) / sd(x, na.rm = TRUE)}
                ))

方法二:使用内置的scale()函数

R的scale()函数本身就是实现(x-mean(x))/sd(x)标准化的工具,它内部默认会忽略NA值,代码更简洁:

df1 = df1 %>% 
  mutate(across(A:C, scale))

补充说明

  • 原代码中,只要列存在NA,mean(x)和sd(x)就会返回NA,导致整列计算结果全为NA;
  • 两种方法都不会删除任何行,只会保留原数据中的NA位置,同时对非NA值完成标准化;
  • scale()函数还支持额外参数(如center=FALSE或scale=FALSE),如果只需要中心化或只需要缩放可以灵活调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 21:25:24