我想添加一个新列,其中包含一个序列号,如果它与特定列的条件匹配,则序列号会增加
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
或其他软件包中是否有单个步骤或特定功能编号可以实现此目的?
答案 0 :(得分:2)
我们可以使用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)