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

如何在R数据框中创建依赖Stage列范围值的NR_P列?

问题描述

现有如下R tibble数据框:

# A tibble: 795 × 8
   Epoch `Ultra-slow` alpha   beta   delta   gamma  theta Stage
   <fct>        <dbl> <dbl>  <dbl>   <dbl>   <dbl>  <dbl> <chr>
 1 8           384.   74.1  13.6   1926.   0.316   204.   A    
 2 9            21.9  10.7   1.79   155.   0.0518   23.4  A    
 3 10            9.22  4.28  0.360   19.1  0.0138    3.22 A    
 4 11            2.89  5.02  0.792   31.5  0.0156    4.42 A    
 5 12           20.5   2.79  0.381   50.9  0.0159    4.15 A    
 6 13            5.49  6.70  0.395   19.7  0.0114    3.64 A    
 7 14            6.27  5.33  0.241    5.39 0.00406   4.12 A    
 8 15            5.23  4.70  0.275    7.25 0.00230   4.15 A    
 9 22            3.25  1.03  0.170   21.8  0.00172   5.01 2    
10 23            3.57  1.93  0.240   14.7  0.00191   4.44 2    
# ℹ 785 more rows

需新增一列NR_P:当该行处于NREM周期时取值为TRUE,否则为FALSE。NREM周期定义为:

  • 连续时长≥30个Epoch的Stage 2、3或4阶段
  • 且以Stage R或持续时长≥10个Epoch的清醒阶段A结束
解决方案

可以通过识别连续的Stage分段,结合分段的长度与后续终止分段的条件来实现,使用dplyr包即可完成:

  1. 加载依赖包
library(dplyr)
  1. 标记连续的Stage分段,并计算每个分段的关键属性
df_processed <- df %>%
  # 为连续相同的Stage分配唯一分段ID
  mutate(segment_id = consecutive_id(Stage)) %>%
  # 按分段ID计算每个分段的核心信息
  mutate(
    stage_type = first(Stage),
    segment_length = n(),
    next_stage = lead(stage_type),
    next_segment_len = lead(segment_length),
    .by = segment_id
  )
  1. 判断每个分段是否符合NREM周期定义,生成NR_P列
df_final <- df_processed %>%
  mutate(
    NR_P = case_when(
      # 满足NREM周期的所有条件:当前是2/3/4阶段、长度≥30,且后续是R或长时A
      stage_type %in% c("2", "3", "4") & 
      segment_length >= 30 & 
      (next_stage == "R" | (next_stage == "A" & next_segment_len >= 10)) ~ TRUE,
      # 其他所有情况标记为FALSE
      TRUE ~ FALSE
    ),
    .by = segment_id
  ) %>%
  # 移除中间辅助列(可选,按需保留)
  select(-segment_id, -stage_type, -segment_length, -next_stage, -next_segment_len)

关键说明

  • consecutive_id()函数自动为连续相同的Stage生成唯一ID,实现按分段分组计算
  • lead()函数获取下一个分段的信息,用于验证当前分段的终止条件是否符合要求
  • 仅符合条件的NREM分段内的行被标记为TRUE,终止段(R或长时A)不会被标记

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 02:59:50