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

如何基于位置矩阵划分连续区域并生成统计矩阵?

这是个典型的连续序列分组+聚合统计问题,我给你用R和Python两种数据分析常用工具来实现,代码简洁易懂,完全匹配你要的统计结果:


用R实现(dplyr包)

R的tidyverse系列工具处理这种分组统计非常顺手,步骤如下:

# 1. 构造原始数据框
df <- data.frame(
  position = c(1,2,3,6,8,9,10,11),
  case = c(2,4,1,12,5,22,1,12),
  control = c(1,10,7,3,5,9,24,2)
)

# 2. 生成连续区域的分组ID
# 用diff计算相邻位置差,差不为1的地方标记为新区域,cumsum累加生成区域编号
df$region <- cumsum(c(1, diff(df$position) != 1))

# 3. 按区域分组计算所需统计量
library(dplyr)
result <- df %>%
  group_by(region) %>%
  summarise(
    start = min(position),
    end = max(position),
    min_case = min(case),
    max_case = max(case),
    mean_case = round(mean(case), 2), # 保留两位小数和示例一致
    min_control = min(control)
  )

# 输出结果
print(result)

运行后得到的结果和你要求的完全一致:

region start end min_case max_case mean_case min_control
1 1 3 1 4 2.33 1
2 6 6 12 12 12.00 3
3 8 11 1 22 10.00 2


用Python实现(pandas库)

如果习惯用Python做数据分析,pandas同样可以轻松搞定:

import pandas as pd

# 1. 构造原始DataFrame
data = {
    'position': [1,2,3,6,8,9,10,11],
    'case': [2,4,1,12,5,22,1,12],
    'control': [1,10,7,3,5,9,24,2]
}
df = pd.DataFrame(data)

# 2. 生成连续区域的分组ID
# diff()计算相邻位置差,不等于1则标记为True,cumsum()累加生成区域编号
df['region'] = (df['position'].diff() != 1).cumsum()

# 3. 按区域分组聚合统计量
result = df.groupby('region').agg(
    start=('position', 'min'),
    end=('position', 'max'),
    min_case=('case', 'min'),
    max_case=('case', 'max'),
    mean_case=('case', lambda x: round(x.mean(), 2)), # 保留两位小数
    min_control=('control', 'min')
).reset_index()

# 输出结果
print(result)

运行后输出的结果和你需要的统计矩阵完全匹配。


内容的提问来源于stack exchange,提问作者H. dashti

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:55:54