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

使用R语言tidyverse查找满足连续收敛条件的分组图像索引

用tidyverse查找首个连续5次收敛的图像索引

针对你的需求,我们可以通过tidyverse的分组计算,快速定位每个Image_series_names组内第一个满足「当前及后续4个Convergence_type均为convergence」的Image_number。

方法一:使用slider包(滑动窗口更简洁)

先加载所需包:

library(tidyverse)
library(slider)

处理数据的代码逻辑:

result_df <- df %>%
  # 按图像系列分组
  group_by(Image_series_names) %>%
  # 将收敛状态转为数值标记(1=收敛,0=未收敛)
  mutate(converge_flag = as.integer(Convergence_type == "convergence")) %>%
  # 计算当前位置及后续4个位置的标记和,仅保留完整窗口的结果
  mutate(consecutive_sum = slide_sum(converge_flag, .before = 0, .after = 4, .complete = TRUE)) %>%
  # 筛选出连续5次收敛的行
  filter(consecutive_sum == 5) %>%
  # 取每组第一个符合条件的记录
  slice_head(n = 1) %>%
  # 重命名结果列并保留关键信息
  select(Image_series_names, first_converge_image = Image_number) %>%
  # 确保所有图像系列都被保留,无符合条件的填充NA
  right_join(df %>% distinct(Image_series_names), by = "Image_series_names") %>%
  # 取消分组
  ungroup()

方法二:仅用dplyr(无需额外包)

如果不想依赖slider包,可以用lead函数手动判断连续状态:

result_df <- df %>%
  group_by(Image_series_names) %>%
  mutate(
    # 判断当前及后续4个状态是否均为收敛,最后几个位置用默认值避免NA干扰
    is_consecutive = Convergence_type == "convergence" &
      lead(Convergence_type, 1, default = "no_convergence") == "convergence" &
      lead(Convergence_type, 2, default = "no_convergence") == "convergence" &
      lead(Convergence_type, 3, default = "no_convergence") == "convergence" &
      lead(Convergence_type, 4, default = "no_convergence") == "convergence"
  ) %>%
  filter(is_consecutive) %>%
  slice_head(n = 1) %>%
  select(Image_series_names, first_converge_image = Image_number) %>%
  right_join(df %>% distinct(Image_series_names), by = "Image_series_names") %>%
  ungroup()

两种方法最终都会返回包含所有76个图像系列的结果集,first_converge_image列对应首个满足连续5次收敛的图像编号,无符合条件的系列会显示NA。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:17:42