我有一个从 2010 年 1 月 1 日到 2012 年 12 月末的数据集。我想识别 ID
存在特定月份,然后过滤所有这些 ID
从数据集中筛选出这些 ID
的特定月份s。
例如:
如果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), ]
最佳答案
我们可以按“年”和“ID”分组,获取不同(n_distinct
)“月”的数量,在过滤器
中检查它是否等于12 >。如果“年份”、“ID”没有 12 个唯一的月份,则会被删除
library(dplyr)
df %>%
group_by(year, ID) %>%
filter(n_distinct(Month) == 12) %>%
ungroup
关于根据月份删除 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70634888/