条件递增

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了条件递增相关的知识,希望对你有一定的参考价值。

我想添加一个新列,其中包含一个序列号,如果它与特定列的条件匹配,则会增加

Table1 <- tibble::tribble(~x, ~y,
                  "a",  1,
                  "b",  2,
                  "c",  2,
                  "d",  0,
                  "e",  1,
                  "f",  0,
                  "g",  0
)

Expected

x y RowGroup
a 1 1
b 2 2
c 2 3
d 0 3
e 1 4
f 0 4
g 0 4

我已经获得了以下代码的解决方案,但解决方案分两步完成

Table1 <- Table1 %>% 
  mutate(RowGroup = if_else(!y == "0", cumsum(!y == "0"), NA_integer_)) %>% 
  fill(RowGroup, .direction = "down")

是否有一个步骤或特定功能编号从tidyverse或其他一些包来实现这一目标?

答案

我们可以使用cumsum并在y != 0时递增序列。

library(dplyr)

Table1 %>% mutate(RowGroup = cumsum(y != 0))

#  x         y RowGroup
#  <chr> <dbl>    <int>
#1 a         1        1
#2 b         2        2
#3 c         2        3
#4 d         0        3
#5 e         1        4
#6 f         0        4
#7 g         0        4

显然,您也可以在没有任何包的情况下直接实现此目的。

Table1$RowGroup <- cumsum(Table1$y != 0)

以上是关于条件递增的主要内容,如果未能解决你的问题,请参考以下文章

条件递增

条件片段和导航重用

4.3 合并重复的条件执行片段

如何有条件地将 C 代码片段编译到我的 Perl 模块?

自动刷新android片段,直到满足条件

兼容ie8,firefox,chrome浏览器的代码片段