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

R中存在整行NA的数据框如何正确计算汇总统计量

问题原因

统计函数默认遇到NA就返回NA,你之前尝试的na.omit写法逻辑和参数顺序都不对:

  • 首先across的第一个参数必须是列选择规则,你把.fns = na.omit放前面属于参数传错位置
  • 其次na.omit是对传入的列向量删NA,不是给统计计算加忽略NA的规则,套在summarise外层根本不会生效到后续的统计函数里。
正确写法

直接给所有统计函数加na.rm = TRUE参数即可,计算时会自动跳过NA值,where(is.numeric)的判断也会自动跳过字符型的a列,不需要额外处理非数值列:

library(tidyverse)

# 测试数据
fimber <- tibble(a = c("1", "2", "3", "4", "5"),
                 b = c(8, 9, 10, NA, NA),
                 c = c(10, 15, 20, NA, NA),
                 d = c(50, 60, 70, NA, NA),
                 e = c(80, 90, 100, NA, NA)
)

# 修正后的汇总代码,存在整行NA也能正常计算
fimber %>% add_row(a = "Min", round( summarise(., across(where(is.numeric), ~min(.x, na.rm = TRUE))), 2) )
fimber %>% add_row(a = "Max", round( summarise(., across(where(is.numeric), ~max(.x, na.rm = TRUE))), 2) )
fimber %>% add_row(a = "Mean", round( summarise(., across(where(is.numeric), ~mean(.x, na.rm = TRUE))), 2) )
fimber %>% add_row(a = "Median", round( summarise(., across(where(is.numeric), ~median(.x, na.rm = TRUE))), 2) )
fimber %>% add_row(a = "St. Dev.", round( summarise(., across(where(is.numeric), ~sd(.x, na.rm = TRUE))), 2) )
效果说明

运行后会在原数据末尾追加对应统计行,数值列计算时会自动排除含NA的行,a列填入对应统计量名称,不会出现结果全为NA的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:51:45