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

在R中对分组数据框应用bcp实现贝叶斯变点检测

按组计算变点后验概率并追加到原数据框

你需要对分组数据框的每组应用bcp()函数,提取posterior.prob并追加到原数据中,以下是正确实现方式:

示例数据与包加载

# INSTALL PACMAN
if (!require("pacman", character.only = TRUE)) {
  install.packages("pacman")
}

pacman::p_load(bcp,tidyverse)

df <- data.frame(
  date = c(seq(Sys.Date(), by = -1, length.out = 1000), seq(Sys.Date(), by = -1, length.out = 1000)),
  value = c(rnorm(200, mean = 20, sd = 1), rnorm(800, mean = 17, sd = 2), rnorm(400, mean = 200, sd = 3), rnorm(600, mean = 150, sd = 4)),
  product = c(rep("A", 1000), rep("B", 1000))
)

正确实现代码

使用group_modify处理每组数据,确保返回与原组行数一致的tibble,从而保留原数据列并新增目标字段:

result_df <- df %>%
  group_by(product) %>%
  group_modify(~ {
    # 计算当前组的bcp结果
    bcp_out <- bcp(.x$value)
    # 将posterior.prob作为新列追加到原组数据
    .x %>% mutate(posterior_prob = bcp_out$posterior.prob)
  }) %>%
  ungroup()

错误原因说明

  • group_map默认返回列表而非数据框,无法直接得到带原列的结果
  • 之前的group_modify尝试中,要么返回了enframe生成的长格式数据(行数与原组不匹配),要么仅返回posterior.prob向量,不符合group_modify需要返回同结构tibble的要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 13:03:27