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

R语言:无需for循环,在指定列出现*后递增新列值的最优方法

R语言实现:在"*"符号后递增生成分组列

问题描述

我有如下结构的数据表:

Value:
U
R
T
*
D
E
*
M
R
Z
*
...

需要新增一列,要求在第一列出现""时,新列的值在该""之后递增,预期结果如下:

Value, newcolumn:
U 1
R 1
T 1

  • 1
    D 2
    E 2
  • 2
    M 3
    R 3
    Z 3
  • 3

希望不使用for循环,用最符合R语言风格的方式实现。我曾尝试用rleid()函数,但该函数在Value列出现""时就会递增计数,不符合我需要在""之后才递增的需求。

数据结构如下:

structure(list(value = c("U", "R", "T", "*", "D", "E", "*", "M","R", "Z", "*")), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA,-11L))

解决方案

使用dplyr包的mutate()结合cumsum()和lag()函数即可实现:

library(dplyr)
df %>% mutate(value2 = cumsum(lag(value, default = '') == '*') + 1)

原理说明

  • lag(value, default = ''):将value列整体下移一行,第一行用空字符串填充,以此定位当前行的前一行是否为"*"
  • lag(...) == '*':生成逻辑向量,前一行是"*"的位置为TRUE,否则为FALSE
  • cumsum():对逻辑向量累加,TRUE会被当作1计算,每遇到前一行是"*"的情况,累加值就加1
  • +1:确保初始分组从1开始,而非0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 11:02:57