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

R语言如何使用mutate实现同符号连续值的累计计数并生成新列

R语言使用dplyr实现连续正负值序列计数

实现逻辑为:先识别数值符号变化的位置生成独立分组,再对每个分组内的序列按顺序计数,最后乘以对应符号即可得到要求的z列,完整可运行代码如下:

library(dplyr)

# 示例数据
df <- data.frame(x = c(0.5, 1, 6.5, -2, 3, -0.2, -1))

# 生成z列(适配dplyr 1.1.0及以上版本)
df <- df %>%
  mutate(
    sign_x = sign(x),
    group_id = cumsum(sign_x != lag(sign_x, default = 0)),
    z = row_number() * sign_x,
    .by = group_id
  ) %>%
  select(-sign_x, -group_id)

如果你使用的是1.1.0以下版本的dplyr,可以使用group_by写法兼容:

df <- df %>%
  mutate(
    sign_x = sign(x),
    group_id = cumsum(sign_x != lag(sign_x, default = 0))
  ) %>%
  group_by(group_id) %>%
  mutate(z = row_number() * sign_x) %>%
  ungroup() %>%
  select(-sign_x, -group_id)

运行后得到的df输出如下,完全符合预期:

x  z
1  0.5  1
2  1.0  2
3  6.5  3
4 -2.0 -1
5  3.0  1
6 -0.2 -1
7 -1.0 -2

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:24:03