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

R语言如何按MAT分组统计STATUS列连续序列长度并输出为数据框

解决方法

以下提供两种常用实现方案,均会输出包含MAT.、lengths(连续序列长度)、values(对应STATUS取值)三列的结果数据框:

方案1:tidyverse 生态实现(代码更简洁易读)

# 加载依赖包
library(dplyr)
library(tidyr)

result <- df_group_MAT %>%
  # 先按MAT和日期排序,保证连续统计的顺序和时间顺序一致
  arrange(MAT., DATA) %>%
  group_by(MAT.) %>%
  summarise(
    # 对每个分组的STATUS执行rle,转换为数据框后存入列表
    rle_result = list(as.data.frame(unclass(rle(STATUS))))
  ) %>%
  # 展开嵌套的统计结果
  unnest(rle_result)

方案2:Base R 实现(无需加载第三方包)

# 按MAT和日期排序,避免原数据顺序混乱影响统计
df_sorted <- df_group_MAT[order(df_group_MAT$MAT., df_group_MAT$DATA), ]
# 按MAT分组
df_grouped <- split(df_sorted, df_sorted$MAT.)

# 遍历每个分组计算rle,合并为最终数据框
result <- do.call(rbind, lapply(names(df_grouped), function(mat_id) {
  rle_obj <- rle(df_grouped[[mat_id]]$STATUS)
  data.frame(
    MAT. = as.integer(mat_id),
    lengths = rle_obj$lengths,
    values = rle_obj$values
  )
}))

注意:如果你的原数据已经保证每个MAT分组内的行是按时间升序排列的,可以省略排序步骤,减少运行耗时。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:15:04