#r #dplyr #tidyr
#r #dplyr #tidyr
Вопрос:
Я хочу добавить новый столбец, содержащий порядковый номер, который увеличивается, если он соответствует условиям определенного столбца
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:
Мы могли бы использовать 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)