我有一个日期和相应值的数据框架.

date <- Sys.Date() + sort(sample(1:26, 26))

values <- c(sample(400:415, 10, replace = TRUE), 
            420, 421, 422, 420, 419, 421, 
            sample(430:435, 10, replace = TRUE))

df <- data.frame(date, values)

我想将数据过滤到这样的行,即当date按升序排列时,420±2范围至少重复五次.df的最终版本将只包含420, 421, 422, 420, 419, 421中的values行,因为sample()数据将被删除.

我正在寻找dplyrdata.table的解决方案.

推荐答案

这里有一个有dplyr的选项

library(dplyr)
library(data.table)
df %>% 
  mutate(values2 = between(values, 420-2, 420 + 2)) %>% 
  group_by(grp = rleid(values2)) %>% 
  filter(n() > 5, all(values2)) %>%
  ungroup %>%
  select(-values2, -grp)

-输出

# A tibble: 6 × 2
  date       values
  <date>      <dbl>
1 2022-09-04    420
2 2022-09-05    421
3 2022-09-06    422
4 2022-09-07    420
5 2022-09-08    419
6 2022-09-09    421

或将base Rrle相加

subset(df, inverse.rle(within.list(rle(values >= (420-2) &
   values <= (420 + 2)), {values[values & lengths < 5] <- FALSE})))
     date values
11 2022-09-04    420
12 2022-09-05    421
13 2022-09-06    422
14 2022-09-07    420
15 2022-09-08    419
16 2022-09-09    421

R相关问答推荐

如何计算新变量中的通货inflating 率?

将R data.frame转换为json数组(源代码)

如何使用Cicerone指南了解R Shiny中传单 map 的元素?

如何将y轴上的线定位得彼此更近

使用预定值列表将模拟数量(n)替换为rnorm()

从R中的另一个包扩展S3类的正确方法是什么

是否可以 Select 安装不带文档的R包以更有效地存储?

无法在我的情节中表现出显着的差异

根据shiny 应用程序中的数字输入更改图标 colored颜色

检测(并替换)字符串中的数学符号

单击 map 后,将坐标复制到剪贴板

判断字符串中数字的连续性

在R中使用Scale_y_Break后更改y轴标签

根据类别合并(汇总)某些行

方法::slotName如何处理非类、非字符的参数?

查找所有站点的最小值

如何将一个方阵分解成没有循环的立方体

如何删除R中除数字元素以外的所有元素

错误包arrowR:READ_PARQUET/OPEN_DATASET&QOT;无法反序列化SARIFT:TProtocolException:超出大小限制&Quot;

使用&Fill&Quot;在gglot中创建 colored颜色 渐变