使用带条件的循环计算满足累积占比≥0.95的最小元素个数
R 实现方法
核心逻辑是利用R内置的累加和函数cumsum()快速计算前缀和,再匹配第一个符合阈值要求的位置:
分步实现
- 计算数据集总求和:
total <- sum(x) - 计算所有前缀累加和序列:
cumulative_sum <- cumsum(x) - 匹配第一个占比超过0.95的位置索引:
k <- which(cumulative_sum / total > 0.95)[1]
完整可运行代码
# 示例数据集 x <- c(3,4,6,7,8,4,5,3,4,3,5,6) # 计算最小k total_sum <- sum(x) cum_sum <- cumsum(x) k <- which(cum_sum / total_sum > 0.95)[1] # 输出结果 print(k)
运行说明
示例数据集的运行结果为12,验证过程:前11个元素累加和为52,占比约为89.7%小于0.95,前12个元素累加和为58,占比为100%首次超过阈值,符合需求。
封装复用版
可以封装为自定义函数适配任意数据集和阈值:
get_min_k <- function(num_vec, threshold = 0.95) { total <- sum(num_vec) cum_vec <- cumsum(num_vec) res <- which(cum_vec / total > threshold)[1] # 兼容极端情况:所有元素累加才刚好达到阈值 return(ifelse(is.na(res), length(num_vec), res)) } # 测试调用 get_min_k(x)
内容的提问来源于stack exchange,提问作者Vorrven
相关产品推荐
相关产品推荐

