我有這個小標題:
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))
任何幫助表示感謝
uj5u.com熱心網友回復:
我們可以使用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
uj5u.com熱心網友回復:
與 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/460975.html
