R 如何过滤出重复次数大于特定数字的重复值序列

R 如何过滤出重复次数大于特定数字的重复值序列,r,dplyr,tidyverse,R,Dplyr,Tidyverse,我正在处理一组数据。数据的格式如下所示: SEQ STEP <dbl> <dbl> 1 x 4.00 2 x 0 3 x 0 4 x 4.00 5 x 0 6 x 0 现在我想过滤掉PAXSTEP下的零“0”,如果它们以超过60次的顺序出现,也就是说,如果第5-100行有零,而第101行在PAXSTEP下有一个大于0的数字,我想过

我正在处理一组数据。数据的格式如下所示:

  SEQ       STEP
  <dbl>     <dbl>
1 x         4.00
2 x         0   
3 x         0   
4 x         4.00
5 x         0   
6 x         0
现在我想过滤掉PAXSTEP下的零“0”,如果它们以超过60次的顺序出现,也就是说,如果第5-100行有零,而第101行在PAXSTEP下有一个大于0的数字,我想过滤掉第5-100行

steps%>%
 group_by(SEQ)%>%

这里有一种可能的方法。我创建了一个样本数据,因为您的样本数据不足以调查您的案例。我特意在
SEQN
中的一组中创建了一个0(60次)的序列,并试图将其删除。对于每个
SEQN
,我使用
diff()
cumsum()
创建了子组。只要
PAXSTEP
中的绝对差值大于0,就会创建一个新的子组。使用我的示例数据,您将在
SEQN
==1(第2-61行)中看到0序列的子组编号1。我进一步使用这个变量进行分组。最后一步是逻辑检查。您的目标是
PAXSTEP==0
,您希望删除长度超过60的0序列,对吗?通过使用
n()。如果
PAXSTEP==0
n()>=60
,则表示要删除满足条件的行。出于从属的原因,我在这里否定了这些条件。以下代码从
SEQN
==1中删除了60行,这些行在
PAXSTEP
中包含0

library(dplyr)

mydf <- data.frame(SEQN = rep(c(1,2), each = 100),
                   value = 1:200,
                   PAXSTEP = c(1, rep(0, times = 60), 62:200))

group_by(mydf, SEQN) %>%
mutate(check = cumsum(c(F, abs(diff(PAXSTEP)) > 0))) %>%
group_by(check, add = TRUE) %>%
filter(!(PAXSTEP == 0 & n() >= 60)) %>%
ungroup %>%
select(-check)
库(dplyr)
多年筹资框架%
突变(检查=cumsum(c(F,abs(diff(PAXSTEP))>0)))%>%
分组依据(检查,添加=真)%>%
过滤器(!(PAXSTEP==0&n()>=60))%>%
解组%>%
选择(-check)

使用
lag
只需检查TIBLE中的单个值,
n=60
行。如果要检查60个值的完整序列不发生变化,则需要执行更多操作。一种策略是在
PAXSTEP
上使用累积和之类的东西,然后您确实可以检查下60行的单个值是否保持不变(假设您在PAXSTEP中没有负值)。谢谢,这比我想的容易多了。
library(dplyr)

mydf <- data.frame(SEQN = rep(c(1,2), each = 100),
                   value = 1:200,
                   PAXSTEP = c(1, rep(0, times = 60), 62:200))

group_by(mydf, SEQN) %>%
mutate(check = cumsum(c(F, abs(diff(PAXSTEP)) > 0))) %>%
group_by(check, add = TRUE) %>%
filter(!(PAXSTEP == 0 & n() >= 60)) %>%
ungroup %>%
select(-check)