根据 tidyverse 中的行号添加增量值?

Add incremental values based on row numbers in tidyverse?

我有这个问题:

tibble(country = c("USA","USA","USA","USA","CHINA","CHINA","CHINA","CHINA","SPAIN","SPAIN","SPAIN","SPAIN"), 
       values = c(10,20,100,30,60,70,80,90,100,20,100,90))

我如何制作以下列 - 条件是人口列从值 1 开始并递增 +1,当值 == 100 时,它重置为值 1 并再次开始递增 - 请参见最后一个示例西班牙变化发生两次的地方。

所以最后的标题是:

tibble(country = c("USA","USA","USA","USA","CHINA","CHINA","CHINA","CHINA","SPAIN","SPAIN","SPAIN","SPAIN"), 
       values = c(10,20,100,30,60,70,80,90,100,20,100,90), 
       population = c(1,2,1,2,1,2,3,4,1,2,1,2))

感谢任何帮助

我们可以在 'country' 上使用 rowid 和逻辑向量的累加和

library(dplyr)
library(data.table)
df1 %>%
    mutate(population = rowid(country, cumsum(values == 100)))

-输出

# A tibble: 12 × 3
   country values population
   <chr>    <dbl>      <int>
 1 USA         10          1
 2 USA         20          2
 3 USA        100          1
 4 USA         30          2
 5 CHINA       60          1
 6 CHINA       70          2
 7 CHINA       80          3
 8 CHINA       90          4
 9 SPAIN      100          1
10 SPAIN       20          2
11 SPAIN      100          1
12 SPAIN       90          2

与 akrun 的方法略有不同,但逻辑相同:

library(dplyr)

df %>% 
  group_by(country, id_Group =cumsum(values == 100)+1) %>% 
  mutate(population = row_number(), .keep="used")
   country id_Group population
   <chr>      <dbl>      <int>
 1 USA            1          1
 2 USA            1          2
 3 USA            2          1
 4 USA            2          2
 5 CHINA          2          1
 6 CHINA          2          2
 7 CHINA          2          3
 8 CHINA          2          4
 9 SPAIN          3          1
10 SPAIN          3          2
11 SPAIN          4          1
12 SPAIN          4          2