在R中实现按Account role分组统计非NULL值数量的方法
R实现按角色分组统计非空值总数
前提说明
原数据表中的NULL对应R中的缺失值标识NA,导入数据时需要先将NULL转换为NA再进行统计。
第一步:构造示例数据
df <- data.frame( `Account role` = c("Manager", "Administrator", "User", "User", "Manager"), `Created date` = as.Date(c("2021-01-01", "2021-01-12", "2021-01-21", "2021-02-12", "2021-02-15")), `Deleted date` = as.Date(c("2021-04-05", NA, NA, "2021-05-12", NA)), check.names = FALSE )
实现方法
方法1:使用dplyr包(推荐,tidyverse生态常用)
如果未安装dplyr先执行install.packages("dplyr")安装。
library(dplyr) # 统计范围:Created date、Deleted date两个字段的非空值总数量 result <- df %>% group_by(`Account role`) %>% summarise(non_null_total = sum(!is.na(across(c(`Created date`, `Deleted date`))))) # 如果需要统计包括Account role在内的所有字段非空值,把across的参数改成everything()即可
运行后得到的结果如下:
| Account role | non_null_total |
|---|---|
| Administrator | 1 |
| Manager | 3 |
| User | 3 |
统计逻辑验证:
- Administrator仅1条记录:Created date非空、Deleted date空,合计1个非空值
- Manager共2条记录:第一条两个日期都非空(2个)、第二条仅Created date非空(1个),合计3个非空值
- User共2条记录:第一条仅Created date非空(1个)、第二条两个日期都非空(2个),合计3个非空值
方法2:基础R实现(无需安装额外包)
# 先计算每行两个日期字段的非空值数量 df$row_non_null <- rowSums(!is.na(df[, c("Created date", "Deleted date")])) # 按Account role分组求和 result <- aggregate(row_non_null ~ `Account role`, data = df, FUN = sum)
两种方法得到的统计结果完全一致。
内容的提问来源于stack exchange,提问作者Саят Оразов
相关产品推荐
相关产品推荐

