如何在expss中获取列的NA值计数及相关最值统计?
在expss包中统计NA值计数与最值信息的方法
expss包提供了专门工具处理NA统计,同时可以结合dplyr或自身功能获取最值信息,以下是具体实现方案:
一、统计NA值计数
使用na_stat()函数可直接获取变量的缺失值数量、非缺失值数量及缺失占比,支持整体统计和分组统计:
1. 整体数据的NA统计
library(expss) library(dplyr) example <- data.frame(org = c("A", "B", "C", "D", "E", "F", "G"), q1 = c("apple", "apple", NA, "apple", "apple", "apple", NA), q2 = c(NA, NA, NA, "banana", "banana", "banana", NA), q3 = c("orange", NA, "orange", "orange", NA, "orange", NA), region = c("1", "1", "2", "3", "3", "2", "2")) # 统计q1到q3的NA相关信息 na_stat(example, q1 %to% q3)
输出包含n_miss(缺失值数量)、n_valid(非缺失值数量)、pct_miss(缺失占比)等字段。
2. 按分组统计NA值
如果需要按region分组统计各变量的NA情况:
example %>% group_by(region) %>% na_stat(q1 %to% q3)
二、获取最值信息
1. 数值型变量的最值
如果变量是数值型(比如新增数值列q4),可结合dplyr的summarise和across函数获取最小/最大值:
# 新增数值型示例列 example$q4 <- c(10, 20, NA, 30, 40, NA, 50) # 整体最值统计 example %>% summarise(across(q4, list(min = ~min(., na.rm = TRUE), max = ~max(., na.rm = TRUE)))) # 按region分组的最值统计 example %>% group_by(region) %>% summarise(across(q4, list(min = ~min(., na.rm = TRUE), max = ~max(., na.rm = TRUE))))
2. 字符型变量的"最值"
对于示例中的字符型变量(q1-q3),最值指字典序的最小/最大字符,同样可以用上述方式获取:
example %>% summarise(across(q1 %to% q3, list(min_char = ~min(., na.rm = TRUE), max_char = ~max(., na.rm = TRUE))))
三、交叉表中包含NA的统计
如果需要在cross_cpct生成的交叉表中显示NA的计数和占比,只需在mrset参数中添加include_na = TRUE:
# 生成包含NA类别的交叉表 pct_all_with_na <- cross_cpct(example, mrset(q1 %to% q3, include_na = TRUE), region) print(pct_all_with_na)
交叉表会把NA作为单独类别,展示其在各分组中的计数和百分比。
四、综合统计NA计数与最值
可以把NA统计和最值信息整合到一个结果中:
example %>% group_by(region) %>% summarise( # 统计各变量的NA数量 across(q1 %to% q3, list(na_count = ~sum(is.na(.))), .names = "{col}_na_count"), # 统计字符型变量的字典序最值 across(q1 %to% q3, list(min_char = ~min(., na.rm = TRUE), max_char = ~max(., na.rm = TRUE)), .names = "{col}_{fn}"), # 统计数值型变量的最值 across(q4, list(min_val = ~min(., na.rm = TRUE), max_val = ~max(., na.rm = TRUE)), .names = "{col}_{fn}") )
内容的提问来源于stack exchange,提问作者samrr_tr
相关产品推荐
相关产品推荐

