根据月份删除 ID
Removing IDs based on months
我有一个从 2010 年 1 月 1 日到 2012 年 12 月末的数据集。我想确定 ID
具有特定月份的数据,然后过滤所有这些 ID
s 来自数据集,没有过滤掉那些 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), ]
我们可以按'year'和'ID'分组,得到不同的(n_distinct
)个数'Month',检查[=中是否等于12 12=]。如果 'year'、'ID' 没有 12 个唯一月份,则将被删除
library(dplyr)
df %>%
group_by(year, ID) %>%
filter(n_distinct(Month) == 12) %>%
ungroup
我有一个从 2010 年 1 月 1 日到 2012 年 12 月末的数据集。我想确定 ID
具有特定月份的数据,然后过滤所有这些 ID
s 来自数据集,没有过滤掉那些 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), ]
我们可以按'year'和'ID'分组,得到不同的(n_distinct
)个数'Month',检查[=中是否等于12 12=]。如果 'year'、'ID' 没有 12 个唯一月份,则将被删除
library(dplyr)
df %>%
group_by(year, ID) %>%
filter(n_distinct(Month) == 12) %>%
ungroup