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

在R中执行Shapiro检验时如何忽略特定列含NA的行(不删除行)

问题描述

需要对如下数据框按subject分组执行Shapiro检验,但第5行measurement列的NA值会影响结果,希望不删除该行的前提下在分析时忽略它。尝试使用byf.shapiro(dados_novo$measurement ~ dados_novo$subject, dados_novo, na.rm=TRUE)无效。

数据框:

idsubjectmeasurement
1control0.151708
2control0.239930
3patient0.104289
4patient0.329139
5patientNA
可行解决方案

方法1:临时过滤NA值(不改动原数据)

byf.shapiro本身不支持na.rm参数,你之前添加的该参数会被函数忽略。可以先生成不含NA的临时数据集,或者直接在函数调用中用na.omit()处理数据:

# 直接在函数中处理数据,原数据框不受影响
byf.shapiro(measurement ~ subject, data = na.omit(dados_novo))

# 或者先创建临时子集,再执行分析
temp_data <- dados_novo[!is.na(dados_novo$measurement), ]
byf.shapiro(measurement ~ subject, data = temp_data)

方法2:手动分组后处理NA

如果需要更灵活的控制,可先按subject分组,再对每组单独去除NA后执行Shapiro检验:

# 按subject拆分数据,每组自动剔除NA后做检验
lapply(split(dados_novo$measurement, dados_novo$subject), 
       function(x) shapiro.test(na.omit(x)))

关键说明

上述所有方法都不会修改原始数据框dados_novo,第5行的NA会被保留,仅在分析过程中被排除。

内容的提问来源于stack exchange,提问作者Étalo César Porto Xavier

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 14:05:10