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
相关产品推荐
相关产品推荐

