如何过滤掉重复次数大于特定数字的重复值序列
How to filter out a sequence of repeated value with repetitions greater than a specific number
我正在处理一组数据。数据格式如下:
SEQ STEP
<dbl> <dbl>
1 x 4.00
2 x 0
3 x 0
4 x 4.00
5 x 0
6 x 0
我使用以下代码按 SEQ 对数据进行分组,因为大约有 50000 个 SEQ ID:
steps%>%
group_by(SEQ)
我现在想过滤掉 PAXSTEP 下的零“0”,如果它们按顺序出现超过 60 次,即如果第 5-100 行有零并且第 101 行有一个数字 > 0 在 PAXSTEP 下我想过滤掉第 5-100 行。
steps%>%
group_by(SEQ)%>%
这是一种可能的方法。鉴于您的样本数据不足以调查您的案例,我创建了一个样本数据。我故意在 SEQN
的一组中创建了一个 0(60 次)的序列,并试图将其删除。对于每个 SEQN
,我使用 diff()
和 cumsum()
创建了子组。每当 PAXSTEP
中的绝对差值大于 0 时,就会创建一个新的子组。使用我的示例数据,您将看到 SEQN
== 1 中 0 序列的子组编号 1(第 2-61 行)。我进一步使用这个变量进行分组。最后一步是逻辑检查。你的目标是 PAXSTEP == 0
并且你想删除长度超过 60 的 0 序列,对吗?通过使用 n()
,您可以计算每个组中有多少元素(按 SEQN
和 check
分组)。如果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)
我正在处理一组数据。数据格式如下:
SEQ STEP
<dbl> <dbl>
1 x 4.00
2 x 0
3 x 0
4 x 4.00
5 x 0
6 x 0
我使用以下代码按 SEQ 对数据进行分组,因为大约有 50000 个 SEQ ID:
steps%>%
group_by(SEQ)
我现在想过滤掉 PAXSTEP 下的零“0”,如果它们按顺序出现超过 60 次,即如果第 5-100 行有零并且第 101 行有一个数字 > 0 在 PAXSTEP 下我想过滤掉第 5-100 行。
steps%>%
group_by(SEQ)%>%
这是一种可能的方法。鉴于您的样本数据不足以调查您的案例,我创建了一个样本数据。我故意在 SEQN
的一组中创建了一个 0(60 次)的序列,并试图将其删除。对于每个 SEQN
,我使用 diff()
和 cumsum()
创建了子组。每当 PAXSTEP
中的绝对差值大于 0 时,就会创建一个新的子组。使用我的示例数据,您将看到 SEQN
== 1 中 0 序列的子组编号 1(第 2-61 行)。我进一步使用这个变量进行分组。最后一步是逻辑检查。你的目标是 PAXSTEP == 0
并且你想删除长度超过 60 的 0 序列,对吗?通过使用 n()
,您可以计算每个组中有多少元素(按 SEQN
和 check
分组)。如果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)