r - 使用 dplyr 和 rle 对条件组中的连续值进行计数

标签 r conditional-statements dplyr sequence run-length-encoding

我的问题与下面提出的问题非常相似,但是我想添加一个附加命令以仅返回序列具有超过 2 个连续值的情况。

当给定的序列运行在给定的时代和给定的年份内有超过 2 个连续的数字时,如何计算连续“成功”的数量(即 $consec 中的 1 个)?

类似问题:Summarize consecutive failures with dplyr and rle 。为了进行比较,我修改了该问题中使用的示例:

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

如有任何建议,我们将不胜感激。

最佳答案

我们需要创建一个具有长度的逻辑索引并获取其总和

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

关于r - 使用 dplyr 和 rle 对条件组中的连续值进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40083160/

相关文章:

需要和不需要 Jquery 验证

javascript - jQuery:在 not 和 CSS 的多个选择器方面遇到麻烦

r - 如何根据 NA 与字母表对值进行分组

r - 创建一个包含列名称的新变量,以防值不为 NA

R : Check if R object exists before creating it

R:双枢轴使用 DPLYR?

php - 一旦满足条件,如何突破 foreach?

r - 根据经纬度获取 K 个最近邻

mysql - "DROP INDEX"语句的 RMySQL 语法错误

r - 按特定时间切割 POSIXct 以获取日常方法