2016-04-14 54 views
1

我有一個數據框,其中包含三個列,分別爲站點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) 

這工作,但如果我有樣了好幾年,我不知道如何快速創建一個序列匹配這一點。

其次,我不希望在特定季節內來自特定網站的兩個樣本(即我不想要任何複製樣本),這意味着數據框中的最後一行將被刪除。我不知道如何從這一開始。

回答

1

對於第一問題,您可以爲您的一個月(獨立於一年)列並選擇一個(這裏,換算成數字,但你可以保持簡單單詞選擇太)。 對於問題,你可以使用disctinct

Dataframe %>% 
    mutate(month = as.numeric(format(date, '%m'))) %>% 
    filter(month %in% c(3,4,5,9,10,11)) %>% 
    distinct(month, site) 
+0

謝謝。這非常棒,非常接近!但是,不是每個網站都不同,有沒有創建網站/季節組合ID並使用不同的方法?即我想保留所有站點的春季和秋季樣本。 –

+0

只是糾正這一點;-)更好? – ztl

+0

完美謝謝! –

2

一種選擇是使用幾個月功能子集:

library(dplyr) 
`%datein%` <- function(x,y) (x %in% y) 
seasons<-c("March", "April", "May", "September", "October", "November") 
Season <- Dataframe %>% 
filter(months(Dataframe$date) %datein% seasons) 

這將允許選擇同月(S)在多個年。

+0

謝謝你這個問題,我剛纔編輯這個以便行是基於幾個月刪除功能你把 –