R语言:按区间统计观测数及带条件分组统计求助
在R中处理mtcars的mpg区间统计需求
方法一:基础R实现
步骤1:划分mpg区间
通过cut()函数给mpg字段划分区间,结合mtcars中mpg的实际范围(10.4~33.9)设置断点,生成左开右闭的区间分组:
# 生成区间分组变量 mtcars$mpg_group <- cut( mtcars$mpg, breaks = c(10, 15, 20, 25, 30, 35), right = TRUE, # 区间为左开右闭格式 include.lowest = FALSE # 不包含左端点(适配最小mpg=10.4) ) # 转为因子确保所有定义的区间都被保留 mtcars$mpg_group <- factor(mtcars$mpg_group, levels = levels(mtcars$mpg_group))
步骤2:统计各类数值
分别统计每个区间的总观测数,以及gear为3或4的车辆数,最后合并为结果表格:
# 统计每个区间的总观测数 total_count <- table(mtcars$mpg_group) # 统计每个区间内gear为3/4的车辆数量 gear_34_count <- table(mtcars[mtcars$gear %in% c(3, 4), "mpg_group"]) # 合并为结构化数据框 result_df <- data.frame( mpg区间 = names(total_count), 观测总数 = as.numeric(total_count), gear3或4数量 = as.numeric(gear_34_count) ) # 查看最终结果 print(result_df)
方法二:dplyr包实现(更简洁)
使用dplyr的管道语法可以一步完成分组和统计,代码可读性更强:
library(dplyr) result_df <- mtcars %>% # 生成mpg区间分组 mutate(mpg_group = cut(mpg, breaks = c(10,15,20,25,30,35), right = TRUE)) %>% # 按区间分组统计 group_by(mpg_group) %>% summarise( 观测总数 = n(), gear3或4数量 = sum(gear %in% c(3,4)) # 逻辑值求和等价于计数符合条件的样本 ) %>% ungroup() # 查看结果 print(result_df)
自定义区间说明
如果需要调整区间范围,只需修改cut()函数中的breaks参数即可。例如要划分成(0,10],(10,20],(20,30],(30,40],只需将breaks设为c(0,10,20,30,40)。
内容的提问来源于stack exchange,提问作者Emeline
相关产品推荐
相关产品推荐

