根据月份删除 ID

Removing IDs based on months

我有一个从 2010 年 1 月 1 日到 2012 年 12 月末的数据集。我想确定 ID 具有特定月份的数据,然后过滤所有这些 ID s 来自数据集,没有过滤掉那些 IDs.

的特定月份

例如: 如果 ID "B" 少了 Month 2(在下面的数据集中没有模拟),我想从整个数据集中删除 ID "B",并保留 A 、C 和 D,其中 ID 的数据集中的所有月份都完好无损。

我该怎么做?

library(lubridate)
library(tidyverse)
date <- rep_len(seq(dmy("01-01-2010"), dmy("31-12-2011"), by = "days"), 5000)
ID <-  rep(c("A","B","C"), 5000)
df <- data.frame(date = date,
                 x = runif(length(date), min = 60000, max = 80000),
                 y = runif(length(date), min = 800000, max = 900000),
                 ID)

df$jDate <- yday(as.Date(df$date))
df$Month <- month(df$date)
df$year <- year(df$date)

set.seed(1234)
drop_rows <- sapply(sample(1:nrow(df), 3), function(i) {
  return(i:(i+100))
}, simplify = FALSE) %>% unlist()

df <- df[-c(drop_rows), ]

我们可以按'year'和'ID'分组,得到不同的(n_distinct)个数'Month',检查[=中是否等于12 12=]。如果 'year'、'ID' 没有 12 个唯一月份,则将被删除

library(dplyr)
df %>%
   group_by(year, ID) %>% 
   filter(n_distinct(Month) == 12) %>% 
   ungroup