计算变量在R中连续重复的次数

use*_*899 5 r

考虑以下MWE:

df <- data.frame(Day=1:10, Value = c("Yes","No","Yes", "Yes", "Yes", 
                                     "No", "No", "Yes","Yes",  "No"))

 Day Value
   1   Yes
   2    No
   3   Yes
   4   Yes
   5   Yes
   6    No
   7    No
   8   Yes    
   9   Yes
  10    No
Run Code Online (Sandbox Code Playgroud)

我想要一个额外的列来计算"值"已连续"是"的次数.因此,当Value为'No'时,新变量应始终为0.如果是'No'之后第一次出现'Yes',则将其设置为1.如果那么下一个观察结果也是肯定的,它应该是2一旦"是"链断断续续,下一个"是"的新变量将再次为1.所以我的数据框应如下所示:

Day Value Count
 1   Yes  1
 2    No  0
 3   Yes  1  
 4   Yes  2
 5   Yes  3
 6    No  0
 7    No  0
 8   Yes  1
 9   Yes  2
10    No  0 
Run Code Online (Sandbox Code Playgroud)

希望有人可以帮助我.

A5C*_*2T1 4

您可以尝试使用“data.table”,特别是该rleid功能:

例子:

library(data.table)
as.data.table(df)[, count := sequence(.N), by = rleid(Value)][Value == "No", count := 0][]
#     Day Value count
#  1:   1   Yes     1
#  2:   2    No     0
#  3:   3   Yes     1
#  4:   4   Yes     2
#  5:   5   Yes     3
#  6:   6    No     0
#  7:   7    No     0
#  8:   8   Yes     1
#  9:   9   Yes     2
# 10:  10    No     0
Run Code Online (Sandbox Code Playgroud)