如何在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 load | Comment |
|---|---|
| 0 | Grade in |
| 5 | |
| 6 | |
| 0 | Grade out |
若不启用适配代码,第一行数值0会保持空注释,仅当后续出现≥5的数值时才标记Grade in。
内容的提问来源于stack exchange,提问作者Jeremy
相关产品推荐
相关产品推荐

