带因子的DataFrame复杂计数求助:基于给定R语言数据表
嘿,我来帮你搞定这个R语言的复杂计数需求!先理清楚你的数据结构:5303行观测、9个变量,其中包含多个因子型变量(比如有99个水平的Metric.Name、25个水平的Technical.Criterion),还有二分类的Violation.status状态变量。下面我给你几种高频的复杂计数场景和对应的实现代码,你可以根据实际需求调整:
1. 单因子分组基础计数
比如统计每个技术准则(Technical.Criterion)下的观测总数,或者每个度量项(Metric.Name)的出现次数:
# 先加载dplyr包(语法更直观,推荐),没安装的话先跑 install.packages("dplyr") library(dplyr) # 统计每个Technical.Criterion的观测数量,按数量降序排列 tech_crit_count <- df %>% group_by(Technical.Criterion) %>% summarize(总观测数 = n()) %>% arrange(desc(总观测数)) # 用base R快速生成频数表(适合快速查看) table(df$Metric.Name) # 进阶:统计每个Technical.Criterion下,不同Violation.status的数量 status_by_tech <- df %>% group_by(Technical.Criterion, Violation.status) %>% summarize(数量 = n())
2. 多维度交叉计数(列联表)
如果需要同时按多个因子维度(比如技术准则、度量项、违规状态)统计数量,可以用多分组或者列联表工具:
# dplyr多维度分组计数,输出整洁的数据框 multi_dim_count <- df %>% group_by(Technical.Criterion, Metric.Name, Violation.status) %>% summarize(数量 = n(), .groups = "drop") # .groups="drop"取消分组状态,方便后续处理 # base R生成列联表,适合快速看交叉分布 cross_tab <- xtabs(~ Technical.Criterion + Violation.status, data = df) # 转换成数据框格式方便导出/查看 as.data.frame(cross_tab)
3. 带比例的自定义计数
比如统计每个度量项中,"Added"状态的数量占该度量项总数量的比例:
prop_count <- df %>% group_by(Metric.Name) %>% mutate(度量项总数量 = n(), Added状态数量 = sum(Violation.status == "Added")) %>% mutate(Added占比 = Added状态数量 / 度量项总数量) %>% select(Metric.Name, 度量项总数量, Added状态数量, Added占比) %>% distinct() # 去重,每个度量项只保留一行结果
4. 缺失值计数(针对你提到的Critical.Y....变量)
如果Critical.Y....是截断的变量名(比如Critical.Year),可以统计该变量在不同分组下的缺失情况:
# 统计所有变量的缺失值数量 all_missing_count <- df %>% summarize(across(everything(), ~sum(is.na(.)))) # 按违规状态统计Critical类变量的缺失数 missing_by_status <- df %>% group_by(Violation.status) %>% summarize(Critical变量缺失数 = sum(is.na(Critical.Y....))) # 替换成你的实际变量名
小提示:
- 如果因子水平太多(比如
Metric.Name有99个),可以用filter()先筛选你关注的分组再统计,避免结果过于冗长; - 统计结果可以用
write.csv(tech_crit_count, "技术准则计数结果.csv")导出到本地文件。
内容的提问来源于stack exchange,提问作者Talcom
相关产品推荐
相关产品推荐

