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

标签 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

我想要一个额外的列来计算“值”已经连续为"is"的次数。因此,当 Value 为“No”时,新变量应始终为 0。如果是“No”之后第一次出现“Yes”,则将其设置为 1。如果接下来的观察结果也是"is",则应为 2 . 一旦"is"的链断断续续,下一个"is"的新变量将再次为 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 

希望有人能帮助我。

最佳答案

您可以尝试使用“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

关于r - 计算R中变量连续重复的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33954305/

相关文章:

string - 如何将变量值转换为R中的字符串?

r - 吴豪斯曼检验检验内生性

r - NA == 1 检查返回 NA

r - 一种扩展R向量的有效方法

r - 如何直接从列表中的所有嵌套列表中选择同一列?

r - 如何告诉 RStudio 使用包名称自动完成我的函数参数?

r - 绘图条形图,为着色、不透明度或边框颜色添加第二个因素

javascript - 更改 selectInput 和 numericInput 框的外观/形状

r - block 中的希腊字母未正确显示

r - 如何在黄土和样条回归中添加协变量,然后使用 ggplot2 在 r 中绘制它