Условное увеличение - PullRequest
1 голос
/ 10 апреля 2019

Я хочу добавить новый столбец, который содержит порядковый номер, который увеличивается, если он соответствует условиям конкретного столбца

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

Я получил решение с помощью следующего кода, но решение сделанов 2 шага

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

Существует ли один шаг или нумерация определенной функции из tidyverse или какого-либо другого пакета для достижения этой цели?

1 Ответ

2 голосов
/ 10 апреля 2019

Мы могли бы использовать 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)
...