R语言数据帧中按height区间计算对应power最大值的实现方法
R语言height字段固定步长分箱、计算对应power组最大值的实现
原示例代码语法修正
你提供的示例代码存在两处会直接导致运行报错的问题,修正后的基础数据构造代码如下:
# 构造基础数据集 date <- c("9-1-2020","10-1-2020","11-12-2020","12-1-2020") height <- c(32.2,32.3,48,35.2) # 原代码此处误写为power<-(9,10,14,15),R中创建向量必须使用c()函数 power <- c(9,10,14,15) # 直接构造数据框,避免cbind拼接后所有列被强制转为字符类型 data <- data.frame(date, height, power)
实现规则说明
- 分箱范围:height取值区间固定为32~48,步长0.3,生成连续衔接的分箱边界
- 输出格式:最终生成的新数据框中,height列存储每个分箱的区间中心值(即区间上下界的算术平均);power字段单位为10MB,无需做单位转换,直接存储对应分箱内的power最大值即可
- 空区间处理:没有观测值的分箱,对应power值默认为NA,不会被直接丢弃
完整可运行代码
# 生成连续分箱边界 bin_breaks <- seq(from = 32, to = 48, by = 0.3) # 为每个height值匹配所属分箱 data$bin_group <- cut( x = data$height, breaks = bin_breaks, include.lowest = TRUE, # 保证最左侧的32值能被纳入第一个分箱 right = TRUE # 区间形式为左开右闭,可根据实际需求调整区间开闭规则 ) # 分组聚合计算power最大值,保留所有空分箱 library(dplyr) result <- data %>% group_by(bin_group, .drop = FALSE) %>% summarise(power_max = max(power, na.rm = TRUE)) %>% ungroup() # 计算每个分箱的中心值 result$height <- ( bin_breaks[-length(bin_breaks)] + bin_breaks[-1] ) / 2 # 整理最终输出的数据框列顺序 final_result <- result[, c("height", "power_max")]
计算结果校验
以区间[32, 32.3]为例:区间内包含height=32.2、height=32.3两个观测,对应power分别为9、10,区间中心值为(32+32.3)/2=32.15,对应power最大值为10,与代码计算结果一致。
调整分箱范围、步长时,只需修改
bin_breaks的起止参数与步长值;调整区间开闭规则时,修改cut()函数的right参数即可。
内容的提问来源于stack exchange,提问作者Sonce Mesec
相关产品推荐
相关产品推荐

