2016-06-21 35 views
0

我有一個來自現場儀器的數據,其中每15分鐘測量並記錄7個不同參數的值。數據集延續了很多年。有時儀器出現故障或因爲預防性維護而離線進行,導致記錄中的日期不完整。在後處理數據時,我想刪除那些不完整的日子(或者說,或者只保留完整的日子)。刪除不完整天數/保留完整天數

的數據可能的樣子,一個縮寫的例子:

Date     Temp 
2012-02-01 00:01:00 18.5 
2012-02-01 00:16:00 18.4 
2012-02-01 00:31:00 18.6 
. 
. 
. 
2012-02-01 23:31:00 19.0 
2012-02-01 23:46:00 18.9 
2012-02-02 00:01:00 19.0 
2012-02-02 00:16:00 19.0 
2012-02-03 00:01:00 17.0 
2012-02-03 00:16:00 17.1 
2012-02-03 00:31:00 17.0 
. 
. 
. 
2012-02-03 23:31:00 18.0 
2012-02-03 23:46:00 18.2 

所以2012-02-012012-02-03是完整的天,我想刪除2012-02-02,因爲它是一個不完整的一天。

+0

整天是否有一定數量的觀測值(大概爲96)? – lmo

+0

是的,一整天應該有96個觀察(線)每天 – user3900349

回答

1
Date.rle = rle(df$Date) 
Date.good = Date.rle$val[Date.rle$len==96] 
df = df[df$Date %in% Date.good,] 
2
  1. 轉換日期以天
  2. 計數每天觀察
  3. 只保留與觀測

的代碼的最大數量的天數

library(dplyr) 
library(lubridate) 
dataset %>% 
    mutate(Day = floor_date(Date, unit = "day")) %>% 
    group_by(Day) %>% 
    mutate(nObservation = n()) %>% 
    filter(nObservation == max(nObservation) 
0

這裏一個應該工作的基本R方法:

# create a day variable 
df$day <- as.Date(df$Date, format="%Y-%m-%d") 

# calculate the number of observations per day 
df$obsCnt <- ave(df$Temp, df$day, FUN=length) 

# subset data: more than 90 observations 
dfNew <- df[df$obsCnt > 96,] 

我把每天96次觀測的門限,但很容易調整。