使用 dplyr 和 rle 计算具有条件的组中的连续值
Count consecutive values in groups with condition with dplyr and rle
我的问题与下面提出的问题非常相似,但是我想向 return 添加一个额外的命令,仅在序列具有超过 2 个连续值的情况下。
当给定序列 运行 在给定纪元和给定年份内有超过 2 个连续数字时,如何计算连续 "success" 的数量(即 $consec 中的 1)?
类似问题:
.为了比较,我修改了该问题中使用的示例:
library(dplyr)
df <- data.frame(Era=c(1,1,1,1,1,1,1,1,1,1),Year = c(1,2,2,3,3,3,3,3,3,3), consec = c(0,0,1,0,1,1,0,1,1,1))
df %>%
group_by(Era,Year) %>%
do({tmp <- with(rle(.$consec==1), lengths[values])
data.frame(Year= .$Year, Count=(length(tmp)))}) %>%
slice(1L)
> Source: local data frame [3 x 3]
> Groups: Era, Year
> Era Year Count
> 1 1 1 0
> 2 1 2 1
> 3 1 3 2
>
我现在需要的只是添加一个条件,以仅包含 >2 序列中连续数字的情况。期望的结果:
> Source: local data frame [3 x 3]
> Groups: Era, Year
> Era Year Count
> 1 1 1 0
> 2 1 2 0
> 3 1 3 1
如有任何建议,我们将不胜感激。
我们需要用 lengths
创建一个逻辑索引并获取它的 sum
df %>%
group_by(Era, Year) %>%
do({ tmp <- with(rle(.$consec), sum(lengths > 2))
data.frame(Count = tmp)})
# Era Year Count
# <dbl> <dbl> <int>
#1 1 1 0
#2 1 2 0
#3 1 3 1
我的问题与下面提出的问题非常相似,但是我想向 return 添加一个额外的命令,仅在序列具有超过 2 个连续值的情况下。
当给定序列 运行 在给定纪元和给定年份内有超过 2 个连续数字时,如何计算连续 "success" 的数量(即 $consec 中的 1)?
类似问题:
library(dplyr)
df <- data.frame(Era=c(1,1,1,1,1,1,1,1,1,1),Year = c(1,2,2,3,3,3,3,3,3,3), consec = c(0,0,1,0,1,1,0,1,1,1))
df %>%
group_by(Era,Year) %>%
do({tmp <- with(rle(.$consec==1), lengths[values])
data.frame(Year= .$Year, Count=(length(tmp)))}) %>%
slice(1L)
> Source: local data frame [3 x 3]
> Groups: Era, Year
> Era Year Count
> 1 1 1 0
> 2 1 2 1
> 3 1 3 2
>
我现在需要的只是添加一个条件,以仅包含 >2 序列中连续数字的情况。期望的结果:
> Source: local data frame [3 x 3]
> Groups: Era, Year
> Era Year Count
> 1 1 1 0
> 2 1 2 0
> 3 1 3 1
如有任何建议,我们将不胜感激。
我们需要用 lengths
创建一个逻辑索引并获取它的 sum
df %>%
group_by(Era, Year) %>%
do({ tmp <- with(rle(.$consec), sum(lengths > 2))
data.frame(Count = tmp)})
# Era Year Count
# <dbl> <dbl> <int>
#1 1 1 0
#2 1 2 0
#3 1 3 1