根据 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
我有这个问题:
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