You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

R语言:以向量值为分段长度拆分另一向量计算各段均值

实现方案

你可以通过以下两种方式实现需求,结果都和你给出的预期输出完全匹配:

方法1:通过起止索引计算

# 定义输入向量
vec1 <- c(5, 2, 2, 2, 2, 3, 2, 3, 9, 6, 2, 2, 2, 3)
vec2 <- c(1.96845698, 1.11342534, 0.82580110, 0.35762122, 0.07210485, 0.06046759, 0.93615974, 0.85691566, 0.39439991,
          0.26110080, 1.22082336, 0.71940824, 0.32571803, 0.46358160, 0.16009616, 0.13348428, 1.16801097, 0.30184661, 
          0.51190796, 1.69680701, 0.54418158, 0.74969466, 0.17246107, 0.66953561, 1.02689205, 1.67408220, 1.20311478, 
          0.74049935, 0.55211334, 0.31037724, 0.23620425, 0.34532764, 1.64696898, 0.23094382, 0.67733098, 0.32226374, 
          0.25774802, 0.35768477, 0.27219803, 0.02042260, 0.53784081, 1.27521977, 0.07043151, 0.11879638, 0.13358880)

# 可选校验:避免长度不匹配导致错误
if (sum(vec1) != length(vec2)) {
  stop("vec1元素总和与vec2长度不匹配,无法完成分段")
}

# 计算每段的起止索引
end_idx <- cumsum(vec1)
start_idx <- c(1, end_idx[-length(end_idx)] + 1)

# 批量计算每段均值
vec3 <- mapply(function(s, e) mean(vec2[s:e]), start_idx, end_idx)

方法2:基于分组统计的简洁实现

# 生成分组标签:每个元素对应vec2中元素所属的分段序号
groups <- rep(seq_along(vec1), times = vec1)
# 按分组计算均值,转回向量格式
vec3 <- as.vector(tapply(vec2, groups, mean))

结果验证

运行上述代码后得到的vec3和你给出的预期输出完全一致,可通过以下代码验证:

expected <- c(0.8674819, 0.4983137, 0.6256578, 0.7409621, 0.5225631, 0.2523873, 0.7349288, 
              0.9176322, 0.7887523, 0.5765066, 0.3077164, 0.1463103, 0.9065303, 0.1076056)
all.equal(vec3, expected)

内容的提问来源于stack exchange,提问作者climsaver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:27:02