我有一个数据框,其中包含三个列,分别为站点ID,样本日期和测量值。这是一个理论数据集。根据不同的日期要求过滤行
Dates <- data.frame(c(as.Date("2008-7-1"),
rep(as.Date("2008-3-1"), times = 4) ,
rep(as.Date("2008-9-1"), times = 4),
as.Date("2008-9-8")))
Sites <- as.data.frame(as.factor(c("Site1",rep(c("Site1","Site2","Site3","Site4"), 2),
"Site1")))
Values <- data.frame(matrix(sample(0:50, 5*2, replace=TRUE), ncol=1))
Dataframe <- cbind(Dates,Sites,Values)
colnames(Dataframe) <- c("date","site","value")
我筛选出不符合某些标准的特定样本。
首先,我只想选择春季和秋季的样品。所以我想在3月 - 5月和9月 - 11月之间选择网站,这意味着数据框中的第一行将被删除。难道还有比下面的一个更好的办法:
library(dplyr)
Season_sequence <- c(seq(as.Date("2008-3-1"),
as.Date("2008-5-31"), by="days"),
seq(as.Date("2008-9-1"),
as.Date("2008-11-30"), by="days"))
`%datein%` <- function(x,y) (x %in% y)
Season_removed <- Dataframe %>%
filter(date %datein% Season_sequence)
这工作,但如果我有样了好几年,我不知道如何快速创建一个序列匹配这一点。
其次,我不希望在特定季节内来自特定网站的两个样本(即我不想要任何复制样本),这意味着数据框中的最后一行将被删除。我不知道如何从这一开始。
谢谢。这非常棒,非常接近!但是,不是每个网站都不同,有没有创建网站/季节组合ID并使用不同的方法?即我想保留所有站点的春季和秋季样本。 –
只是纠正这一点;-)更好? – ztl
完美谢谢! –