我有一个这样的数据帧:

id <- c(rep(1234, 6), rep(5678, 10), rep(9101, 5))
date <- seq(as.Date("2020-01-01"), as.Date("2020-01-21"), by = "days")
mode <- c(1, 1, 1, 2, 2, 2, 1, 1, 2, 1, 1, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2)
df <- data.frame(id, date, mode)

我想按id分组,并提取MODE列中至少有三个连续2的所有行,如果这些2之前至少有三个连续的1.

我对上面的数据帧的预期输出是

enter image description here

谢谢.

推荐答案

该方法保持至少有三个连续的2紧跟在至少三个连续的1之后的行.

library(dplyr)

df %>%
  group_by(id, grp = data.table::rleid(mode)) %>%
  semi_join(summarise(., mode = mode[1], n = n()) %>%
              filter(mode == 2 & n >= 3 & lag(mode) == 1 & lag(n) >= 3),
            by = c("id", "grp")) %>%
  ungroup() %>%
  select(-grp)

# # A tibble: 7 × 3
#      id date        mode
#   <dbl> <date>     <dbl>
# 1  1234 2020-01-04     2
# 2  1234 2020-01-05     2
# 3  1234 2020-01-06     2
# 4  5678 2020-01-13     2
# 5  5678 2020-01-14     2
# 6  5678 2020-01-15     2
# 7  5678 2020-01-16     2

R相关问答推荐

创建重复删除的唯一数据集组合列表

R创建一个数据透视表,计算多个组的百分比

R:更新后无法运行控制台

如何将dygraph调用到R Markdown作为一个shiny 的react 对象的参数?

错误:非常长的R行中出现意外符号

R s iml包如何处理语法上无效的因子级别?'

如果某些列全部为NA,则更改列

非线性混合效应模型(NLME)预测变量的置信区间

使用rvest从多个页面抓取时避免404错误

将Posict转换为数字时的负时间(以秒为单位)

R如何将列名转换为更好的年和月格式

如何使用前缀作为匹配来连接数据帧?

在具有多个响应变量的比例堆叠条形图上方添加总计

将某个阈值以下的列中的值分类到不同的列中,否则保持该列的原样

Ggplot2:添加更多特定 colored颜色 的线条

将R中对象的CSV数组转换为JSON数组

将y轴格式更改为R中的百分比

创建两个变量组合的索引矩阵

通过不完全重叠的多个柱连接

残差与拟合图上标记点的故障排除