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

使用dplyr统计序列中状态A后接状态B的出现次数

基于tidyverse的状态转移次数统计方案

你需要统计的是相邻两期level的转移次数,核心逻辑是先匹配前一期和当期的level状态,再分组计数即可,具体实现如下:

代码实现

首先加载tidyverse包,导入你的示例数据:

library(tidyverse)

df <- data.frame(value = c(130, 200, 240, 230, 130),
                 level = c("below", "above","above","above", "below"))

基础计数实现

transition_counts <- df %>%
  # 生成上一期的level作为转移起始状态
  mutate(from = lag(level)) %>%
  # 移除第一行(无上一期状态,无对应转移)
  drop_na(from) %>%
  # 当前level作为转移目标状态
  rename(to = level) %>%
  # 按起始、目标状态分组统计次数
  count(from, to, name = "transfer_count")

示例数据运行后输出结果如下:

from    to transfer_count
1 above above              2
2 above below              1
3 below above              1

补全所有转移类型(包含0次的情况)

如果需要输出四类完整的转移结果(包含出现次数为0的below→below),可以增加补全逻辑:

full_transition <- transition_counts %>%
  complete(from = c("below", "above"), 
           to = c("below", "above"), 
           fill = list(transfer_count = 0))

运行后输出:

from    to transfer_count
1 above above              2
2 above below              1
3 below above              1
4 below below              0

转换为宽格式转移矩阵

如果需要更直观的矩阵形式展示,可以进一步转换为宽表:

transition_matrix <- full_transition %>%
  pivot_wider(names_from = to, values_from = transfer_count)

运行后输出:

# A tibble: 2 × 3
  from  above below
  <chr> <dbl> <dbl>
1 above     2     1
2 below     1     0

至于你之前看到的sparseMatrix相关代码,只是稀疏矩阵的构造示例,没有结合你的实际数据逻辑,所以输出结果没有对应业务意义,无需纠结。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:06:03