仅连续保存每月至少x个月的数据

问题描述

我有一个像这样的data.frame:

df <- data.frame(cik = c(1800,1800,1800),date = c('2000/01/01','2000/02/01','2000/03/01','2000/04/01','2000/05/01','2000/06/01','2007/02/01','2009/03/01','2009/04/01','2018/05/01','2018/06/01','2018/07/01','2018/08/01','2018/09/01'),value = c(2,1,3,6,5,4,7,9,8,8))
df <- df %>% mutate(date = as.Date(date,formate="%Y/%m/%d"))

df
cik     date        value
1800    2000-01-01  2       
1800    2000-02-01  1       
1800    2000-03-01  3       
1800    2000-04-01  6       
1800    2000-05-01  5       
1800    2000-06-01  4       
1800    2007-02-01  7       
1800    2007-02-01  5       
1800    2009-03-01  9       
1800    2009-04-01  3       
1800    2018-05-01  9       
1800    2018-06-01  8       
1800    2018-07-01  7       
1800    2018-08-01  6       
1800    2018-09-01  8   

这是一个面板数据集,所以有更多cik,这只是为了说明。

我想对这个数据集做两件事。首先,我想找到所有具有至少5个连续观察值的cik(在我的真实数据集中,我希望至少有24个连续观察值,但是这5个只是用于说明目的。其次,我想保留所有这些行是24个连续观察的一部分。因此,我想要的最终结果是:

df
cik     date        value
1800    2000-01-01  2       
1800    2000-02-01  1       
1800    2000-03-01  3       
1800    2000-04-01  6       
1800    2000-05-01  5       
1800    2000-06-01  4           
1800    2018-05-01  9       
1800    2018-06-01  8       
1800    2018-07-01  7       
1800    2018-08-01  6       
1800    2018-09-01  8   

我尝试了此post的解决方案,并结合了其他帖子,但是找不到答案。似乎当我转换为Yearmonth时,以前的解决方案不再起作用,将不胜感激。预先感谢!

解决方法

您已经很正确地找到了您所提到的答案。
缺少的只是在将日期放入lubridate::ydm函数中之前用diff解析日期。
试试这个:

library(dplyr)
library(lubridate)

df %>%
  mutate(
    date = ydm(date)
  ) %>%
  arrange(cik,date) %>%
  group_by(cik,grp = cumsum(c(1,diff(date) > 1))) %>%
  filter(n_distinct(date) >= 5) %>%
  ungroup() %>%
  select(-grp)

grp会将您的数据放入连续日期的块中。通过仅在cumsum上增加diff > 1,上述解决方案对于您的特定情况也很可靠,在这种情况下,每个日期和cik似乎允许多个观察值(例如,“ 2007-02-01” )。
但是,我还对过滤器进行了调整,以便在没有至少5个不同日期的情况下将其排除在外(使用n_distinct(date)而不是简单的n()) ,这意味着您至少要有5天的时间。
然后由您决定如何在窗口中处理重复的观察结果...

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...