在R中查找条纹的第一个和最后一个日期

卢西亚诺

这是我的数据框:

date <- as.Date(c("1993-09-21", "1994-02-12", "1994-02-23", "1994-05-14", "1994-08-18", "1994-08-25", "1994-08-29", "1994-09-17", "1994-10-16", "1994-10-16", "1994-10-22", "1994-10-26", "1994-12-26", "1995-04-12", "1995-05-04", "1995-06-20", "1995-07-11", "1995-07-27", "1995-08-14", "1995-08-15", "1995-08-22", "1995-08-27", "1995-08-27", "1995-08-28", "1995-08-30", "1995-08-30", "1995-09-03", "1995-09-03", "1995-09-03", "1995-09-15"))

value <- c(2, 1, 1, 1, 2, 1, 2, 4, 2, 2, 1, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 2, 2, 2, 1, 1)

df <- data.frame(date, value)

df$value.equals.1 <- df$value == 1

我需要两件事:(1) 值为 1 的每个连续连续值的第一个和最后一个日期 (2) 每个连续值为 1 的值的长度。

我已经用我需要的东西注释了数据框。我怎样才能在 R 中实现这一点?

在此处输入图片说明

阿克伦

我们可以用rleidfrom做到这一点data.table使用rleidon 'value.equals.1'创建分组变量,根据 'value.equals.1' 对 'date' 进行子集化,并提取按 'grp' 分组的第一个和最后一个 'date'

library(data.table)
setDT(df)[, date[value.equals.1], .(grp  = rleid(value.equals.1))
      ][, .(date  = c(V1[1], V1[.N]), n = .N), by = grp][, grp := NULL][]
#          date n
# 1: 1994-02-12 3
# 2: 1994-05-14 3
# 3: 1994-08-25 1
# 4: 1994-08-25 1
# 5: 1994-10-22 1
# 6: 1994-10-22 1
# 7: 1994-12-26 8
# 8: 1995-08-15 8
# 9: 1995-08-27 3
#10: 1995-08-30 3
#11: 1995-09-03 2
#12: 1995-09-15 2

或者这可以用 tidyverse

library(dplyr)
df %>%
   group_by(grp = rleid(value.equals.1)) %>%
   filter(all(value.equals.1)) %>%
   mutate(n = n()) %>%
   slice(c(1, n())) %>%
   ungroup %>% 
   select(date, n)
# A tibble: 12 x 2
#   date           n
#   <date>     <int>
# 1 1994-02-12     3
# 2 1994-05-14     3
# 3 1994-08-25     1
# 4 1994-08-25     1
# 5 1994-10-22     1
# 6 1994-10-22     1
# 7 1994-12-26     8
# 8 1995-08-15     8
# 9 1995-08-27     3
#10 1995-08-30     3
#11 1995-09-03     2
#12 1995-09-15     2

或者使用rlefrombase R创建组

grp <- inverse.rle(within.list(rle(df$value.equals.1), values <- seq_along(values)))
do.call(c, lapply(with(df, split(date[value.equals.1], 
        grp[value.equals.1])), function(x) c(x[1], x[length(x)])))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

ArrayList查找第一个和最后一个元素

查找上个月的第一个和最后一个日期

如何获得当年的第一个和最后一个日期?

Android RecyclerView查找ItemDecoration的第一个和最后一个视图

Python-查找第一个和最后一个白色像素坐标

查找数组的第一个和最后一个结构

查找每月sql的第一个和最后一个工作日

查找数据集SQL中ID出现的第一个和最后一个日期

在Fortran数组中查找第一个和最后一个正值

查找大于阈值的NumPy数组的第一个和最后一个元素

使用R计算每个变量的第一个和最后一个日期

如何获取文件中的第一个和最后一个日期

从解析的数组中获取第一个和最后一个日期

从第一个日期和最后一个日期获取值sql

Matlab:查找向量中元素的第一个和最后一个出现?

在Excel中查找ID的第一个和最后一个订购日期(同一ID可能会出现多次)

Linux bash解析json:获取第一个和最后一个日期

JavaScript中当月的第一个日期和最后一个日期

查找数组中的第一个、最后一个和中间值。返回最大的一个

在一行中查找具有特定值的第一个和最后一个条目

R:识别重复组中的第一个和最后一个元素

javascript返回错误的第一个日期和最后一个日期

使用递归查找列表的第一个和最后一个元素

如何在第一个和最后一个日期之间填充日期?

Mysql] 查找用户以不同角色加入的事件的第一个和最后一个日期

在 R 中提取第一个和最后一个交易日期

谷歌大查询中是否有一个函数来查找一个日历年的 ISO 周数/周数的第一个日期和最后一个日期?

从周和年获取第一个和最后一个日期

如何使用laravel从当前日期查找季度的第一个日期和最后一个日期