删除不完整的日期/保留完整的日期

时间:2016-06-21 12:19:02

标签: r dataframe

我有现场仪器的数据,每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,因为这是不完整的一天。

3 个答案:

答案 0 :(得分:2)

  1. 将日期转换为天数
  2. 计算每日观察次数
  3. 仅保留具有最大观察次数的那些日子
  4. 代码

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

答案 1 :(得分:1)

Date.rle = rle(df$Date)
Date.good = Date.rle$val[Date.rle$len==96]
df = df[df$Date %in% Date.good,]

答案 2 :(得分: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次观察,但很容易调整。