如何用Base R或dplyr统计非零Group的元素分组数及详情
分组统计与详情查询:Base R和dplyr实现方案
任务说明
需要对数据框myDF完成两项操作:
- 统计
Group≠0的Element-Group组合分组总数(预期结果为4,对应R-Group1、X-Group1、R-Group2、X-Group-3) - 列出这些组合分组的具体元素信息
数据定义
首先给出可复现的数据框:
myDF <- data.frame( Element = c("R","R","X","X","X","X","B","R","R","R","X","X","X"), Group = c(1,1,0,1,1,0,0,0,2,2,-3,-3,-3) )
Base R实现方式
# 第一步:过滤掉Group=0的行 filtered_data <- myDF[myDF$Group != 0, ] # 生成Element与Group的组合键 filtered_data$group_key <- paste(filtered_data$Element, "Group", filtered_data$Group, sep = "-") # 1. 统计分组总数 total_groups <- length(unique(filtered_data$group_key)) cat("分组总数:", total_groups, "\n") # 2. 查看各分组的具体元素信息 group_elements <- split(filtered_data$Element, filtered_data$group_key) print(group_elements)
运行结果:
- 分组总数输出:
分组总数: 4 - 分组元素详情会以列表形式展示每个组合分组对应的所有Element值
dplyr实现方式(简洁高效)
library(dplyr) # 一次性完成过滤、分组键生成、统计与详情整理 group_result <- myDF %>% filter(Group != 0) %>% mutate(group_key = paste(Element, "Group", Group, sep = "-")) %>% group_by(group_key) %>% summarise(element_list = list(Element), .groups = "drop") # 1. 统计分组总数 total_groups_dplyr <- nrow(group_result) cat("分组总数:", total_groups_dplyr, "\n") # 2. 查看分组详情 print(group_result)
运行结果:
- 分组总数输出:
分组总数: 4 group_result数据框会直接展示每个组合分组的名称,以及对应的Element列表
内容的提问来源于stack exchange,提问作者Village.Idyot
相关产品推荐
相关产品推荐

