R语言如何从create_qgroups()生成的因子区间提取各区间最大值
从dvmisc::create_qgroups生成的区间因子中提取区间最大值的实现方法
你可以用以下两种方法实现需求,可根据场景选择:
方法1:正则提取区间右边界
直接从因子的区间文本中提取逗号右侧的右边界值,作为对应区间的最大值:
# 自定义提取函数 get_interval_max <- function(interval_factor) { # 匹配区间字符串中逗号后、右闭符号前的内容,转成数值 right_val <- sub("^.*,\\s*(.+?)\\s*[\\]]$", "\\1", as.character(interval_factor)) as.numeric(right_val) } # 直接调用得到结果向量 max_vec <- get_interval_max(my_q_grp)
运行后得到的max_vec对应你的示例数据结果为:566, 346, 747, 747, Inf, Inf, 346, 566,完全匹配你需要的对应规则。
如果需要把Inf替换为原向量的实际最大值,可补充一行代码:
max_vec[max_vec == Inf] <- max(my_vec)
方法2:直接匹配原始分位数(更推荐,精度更高)
create_qgroups的分组规则本质是基于quantile函数计算的分位点,直接提取分位点匹配更准确,可避免区间显示时四舍五入带来的数值误差:
# 计算生成分组对应的原始分位数 group_num <- 4 quants <- quantile(my_vec, probs = seq(0, 1, length.out = group_num + 1), na.rm = TRUE) # 每个分组的最大值对应分位数从第2位开始的结果,按因子顺序匹配即可 max_vec <- quants[-1][as.integer(my_q_grp)]
内容的提问来源于stack exchange,提问作者Mathica
相关产品推荐
相关产品推荐

