我有一個看起來像這樣的表:
Date Season
1 2022-01-01 Val_1
2 2022-01-02 Val_1
3 2022-01-03 Val_1
4 2022-01-04 Val_2
5 2022-01-05 Val_2
6 2022-01-06 Val_2
7 2022-01-07 Val_1
8 2022-01-08 Val_1
9 2022-01-09 Val_1
10 2022-01-10 Val_2
11 2022-01-11 Val_2
12 2022-01-12 Val_2
13 2022-01-13 Val_1
14 2022-01-14 Val_1
15 2022-01-15 Val_1
我想要做的是為Season列中的每個值標記從 1 到列中存在的連續序列總數的每個連續值序列。我已經看到用類似的函式解決了類似的解決方案rle,但我目前不知道如何將它塑造成這個問題。這是我想要的輸出示例:
Date Season Season_Num
1 2022-01-01 Val_1 1
2 2022-01-02 Val_1 1
3 2022-01-03 Val_1 1
4 2022-01-04 Val_2 1
5 2022-01-05 Val_2 1
6 2022-01-06 Val_2 1
7 2022-01-07 Val_1 2
8 2022-01-08 Val_1 2
9 2022-01-09 Val_1 2
10 2022-01-10 Val_2 2
11 2022-01-11 Val_2 2
12 2022-01-12 Val_2 2
13 2022-01-13 Val_1 3
14 2022-01-14 Val_1 3
15 2022-01-15 Val_1 3
uj5u.com熱心網友回復:
通過一次mutate呼叫,使用cumsumand lag:
library(dplyr)
df %>%
mutate(Season_num = cumsum(Season == "Val_1" & lag(Season, default = "Val_2") != Season))
# Date Season Season_num
# 1 2022-01-01 Val_1 1
# 2 2022-01-02 Val_1 1
# 3 2022-01-03 Val_1 1
# 4 2022-01-04 Val_2 1
# 5 2022-01-05 Val_2 1
# 6 2022-01-06 Val_2 1
# 7 2022-01-07 Val_1 2
# 8 2022-01-08 Val_1 2
# 9 2022-01-09 Val_1 2
# 10 2022-01-10 Val_2 2
# 11 2022-01-11 Val_2 2
# 12 2022-01-12 Val_2 2
# 13 2022-01-13 Val_1 3
# 14 2022-01-14 Val_1 3
# 15 2022-01-15 Val_1 3
uj5u.com熱心網友回復:
我們可以diff在按“季節”分組后得到日期物件之間的值并進行累積和
library(dplyr)
df1 %>%
group_by(Season) %>%
mutate(Season_Num = cumsum(c(TRUE, diff(Date) != 1))) %>%
ungroup
-輸出
# A tibble: 15 × 3
Date Season Season_Num
<date> <chr> <int>
1 2022-01-01 Val_1 1
2 2022-01-02 Val_1 1
3 2022-01-03 Val_1 1
4 2022-01-04 Val_2 1
5 2022-01-05 Val_2 1
6 2022-01-06 Val_2 1
7 2022-01-07 Val_1 2
8 2022-01-08 Val_1 2
9 2022-01-09 Val_1 2
10 2022-01-10 Val_2 2
11 2022-01-11 Val_2 2
12 2022-01-12 Val_2 2
13 2022-01-13 Val_1 3
14 2022-01-14 Val_1 3
15 2022-01-15 Val_1 3
資料
df1 <- structure(list(Date = structure(c(18993, 18994, 18995, 18996,
18997, 18998, 18999, 19000, 19001, 19002, 19003, 19004, 19005,
19006, 19007), class = "Date"), Season = c("Val_1", "Val_1",
"Val_1", "Val_2", "Val_2", "Val_2", "Val_1", "Val_1", "Val_1",
"Val_2", "Val_2", "Val_2", "Val_1", "Val_1", "Val_1")), row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15"), class = "data.frame")
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/513105.html
標籤:r日期
