统计数据框df中各国家分组下city列NA数量的可行方法
实现方案
以下两种方案都可以直接实现按国家分组统计city列NA数量的需求:
方案1:dplyr分组聚合(tidyverse生态推荐)
直接按country字段分组后聚合统计即可,无需做宽表转换:
library(dplyr) city_na_stats <- df %>% group_by(country) %>% summarise(city_na_num = sum(is.na(city)))
返回结果city_na_stats包含两列:country为国家名称,city_na_num为对应国家下city列的NA数量。
方案2:base R原生实现(无需依赖第三方包)
使用aggregate函数做分组统计,注意设置na.action = na.pass避免默认丢弃NA行导致统计错误:
city_na_stats <- aggregate( city ~ country, data = df, FUN = function(x) sum(is.na(x)), na.action = na.pass )
原方法失效原因
你之前使用pivot_wider搭配colSums(is.na(df))的思路不符合需求:
pivot_wider是长表转宽表的函数,你的需求是分组聚合,不需要做表结构转换colSums(is.na(df))是统计整个数据集每一列的总NA数,不会按国家维度拆分统计,自然无法得到分国家的NA计数结果
内容的提问来源于stack exchange,提问作者Eleni
相关产品推荐
相关产品推荐

