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

R语言将RLE计算结果添加至原始数据框新增字段的方法

实现方案

你可以直接通过RLE结果反向映射到原始行完成字段新增,以下是两种常用实现方式:

基础R实现(无第三方包依赖)

核心逻辑是把RLE输出的每个游程长度,按游程本身的长度重复对应次数,覆盖到原始数据的每一行,再把非高于均值的行统一置0即可。

# 以下为示例数据,实际使用时替换为你自己的数据框即可
df <- data.frame(
  Date = as.Date("2024-01-01") + 0:7,
  Events = c(2,5,6,1,7,8,3,2),
  `Above Average` = c(FALSE, TRUE, TRUE, FALSE, TRUE, TRUE, FALSE, FALSE)
)

# 对Above Average字段执行游程编码
rle_result <- rle(df$`Above Average`)

# 按游程顺序把长度映射到每一行,非TRUE段统一标注0
mapped_length <- rep(rle_result$lengths, times = rle_result$lengths)
df$`Run Above Av` <- ifelse(df$`Above Average`, mapped_length, 0)

运行后得到的Run Above Av字段值依次为0,2,2,0,2,2,0,0,完全匹配需求:连续高于均值的段统一标注对应游程长度,其余行标注0。

tidyverse/dplyr实现(适配管道工作流)

如果日常使用dplyr处理数据,可以借助consecutive_id()直接按连续值分组计算,无需手动调用RLE函数:

library(dplyr)

df <- df %>%
  # 按连续相同的Above Average值划分游程组
  group_by(run_group = consecutive_id(`Above Average`)) %>%
  # 组内行数即为游程长度,TRUE组保留长度,其余组置0
  mutate(`Run Above Av` = ifelse(`Above Average`, n(), 0)) %>%
  ungroup() %>%
  select(-run_group)

注意:如果你的Above Average字段是1/0的数值型而非逻辑型,把代码里的判断条件改成Above Average == 1即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 19:30:10