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

如何在R中根据数值跨5的升降状态生成相邻注释列?

R 实现数据列状态标记函数

需求说明

遍历数据中的指定数值列,按以下规则生成相邻注释列:

  • 当数值首次从低于5上升至5及以上时,在对应行注释列标记 Grade in
  • 当数值从5及以上下降至低于5时,在对应行注释列标记 Grade out

注:若需适配示例中「第一行数值低于5但标记Grade in」的场景,可调整代码中的初始状态逻辑。

实现代码

# 定义状态标记函数
mark_grade <- function(df, value_col = "Average load", comment_col = "Comment") {
  # 提取目标数值列
  values <- df[[value_col]]
  # 初始化注释向量
  comments <- rep("", length(values))
  
  # 初始状态:默认未进入"Grade"状态
  in_grade <- FALSE
  
  for (i in seq_along(values)) {
    current_val <- values[i]
    # 判断状态变化并标记
    if (!in_grade && current_val >= 5) {
      comments[i] <- "Grade in"
      in_grade <- TRUE
    } else if (in_grade && current_val < 5) {
      comments[i] <- "Grade out"
      in_grade <- FALSE
    }
    
    # 适配示例中第一行低于5却标记Grade in的场景(需启用则取消注释)
    # if (i == 1 && current_val < 5) {
    #   comments[i] <- "Grade in"
    #   in_grade <- TRUE
    # }
  }
  
  # 将注释列加入原数据框
  df[[comment_col]] <- comments
  return(df)
}

# 测试用示例数据
test_df <- data.frame(
  "Average load" = c(0, 5, 6, 0)
)

# 调用函数生成结果
result_df <- mark_grade(test_df)
print(result_df)

测试结果

启用适配示例的代码段后,输出结果与示例一致:

Average loadComment
0Grade in
5
6
0Grade out

若不启用适配代码,第一行数值0会保持空注释,仅当后续出现≥5的数值时才标记Grade in。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 07:20:02