我的R环境中有一个数据框,我想根据特定条件(一种条件过滤器)对它进行子集化。我的数据框是2004-2014年之间每天的每日值的面板数据集。数据框中的每一天都是单独的观察。每年有366天。我想对数据进行子集处理,以便只有the年在面板数据中保留第366天。在该时间范围内(2004年,2008年,2012年)有三个have年。我分别列出了年份和年份。换句话说,我需要一个脚本,该脚本将返回不包含第366天的数据集,但仅返回除2004、2008和2012年以外的每年的数据集。
我设法通过以下方式实现了这一目标:我将日期和年份列粘贴在一起(例如“2006-366”),并仅使用dplyr的filter命令将每年的子集(2005-366、2006-366、2007-366, 2009-366、2010-366、2011-366、2013-366、2014-366)。但是,这是一种非常粗糙的方法。我希望有人可以在这里指出正确的方向。这是一些可复制的数据以及我使用的工作流程。
#Create DF
year<-rep(c(2004:2014), each=366)
day<-rep(c(1:366))
df<-data.frame(day, year)
#My crude method
df $reduc<-paste(df$year, df$day, sep="-")
df <-df %>%
filter(reduc!="2005-366") %>%
filter(reduc!="2006-366") %>%
filter(reduc!="2007-366") %>%
filter(reduc!="2009-366") %>%
filter(reduc!="2010-366") %>%
filter(reduc!="2011-366") %>%
filter(reduc!="2013-366") %>%
filter(reduc!="2014-366")
最佳答案
设置数据:
df <- expand.grid(year=2004:2014,day=1:366)
nrow(df) ## 4026
现在排除(年不能被4整除)和(天等于366)(如果您在数据集中包含2000年和/或世纪年的话,识别非le年将更加棘手...)
library(dplyr)
df2 <- df %>% filter(!(year %% 4 > 0 & day==366))
关于r - 基于r中的条件标准的过滤器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38315310/