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

在R语言中为分组数据生成0值周围的观测序列计数

问题描述

现有如下R语言数据集:

id1 <- c(1,1,1,1,2,2,2,2,1,1,1,1)
dates <- c("a","a","a","a","b","b","b","b","c","c","c","c")
x <- c(NA,0,NA,NA,NA,NA,0,NA,NA,NA,NA,0)

df <- data.frame(id1,dates,x)

需求:新增一列,针对每个id1与dates的组合,生成0值周围的观测序列,期望结果如下:

desired_result <- c(-1,0,1,2,-2,-1,0,1,-3,-2,-1,0)
实现方法

方法1:使用dplyr包(代码可读性高)

通过分组操作定位每组中0值的位置,再计算组内每个行号与该位置的差值:

library(dplyr)

df <- df %>%
  group_by(id1, dates) %>%
  mutate(desired_result = row_number() - which(x == 0)) %>%
  ungroup()

方法2:使用基础R(无需额外包)

利用ave函数按组处理,逻辑与上述方法一致:

df$desired_result <- ave(seq_len(nrow(df)), df$id1, df$dates,
                         FUN = function(rows) rows - which(df$x[rows] == 0))

两种方法运行后,df$desired_result都会和预期结果完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:42:47