我有一张桌子,看起来像这样:

         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

推荐答案

使用cumsumlag的单个mutate呼叫:

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

R相关问答推荐

如何根据包含相同值的某些列获取总额

在R中列表的结尾添加数字载体

R:更新后无法运行控制台

警告:lmdif:info = 0. nls. lm()函数的输入参数不正确

如何在R中对深度嵌套的tibbles中的非空连续行求和?

如何读取CSV的特定列时,给定标题作为向量

如何通过判断数据框的一列来压缩另一列?

根据列A中的差异变异列,其中行由列B中的相对值标识

打印XTS对象

R spatstat Minkowski Sum()返回多个边界

具有重复元素的维恩图

在数据帧列表上绘制GGPUP

使用ggplot2中的sec_axis()调整次轴

在R中的数据框上使用Apply()函数时,如何保留非数字列?

层次树图的数据树

长/纬点继续在堪萨斯-SF结束,整齐的人口普查

如何在R中添加标识连续日期的新列

将每晚的平均值与每晚的值进行比较,统计是否有效?

如何修复geom_rect中的层错误?

只有当我在循环的末尾放置一条print语句时,Foreach才会给出预期的输出