确保数据框架每天的最小观察次数

时间:2013-07-20 20:57:59

标签: r dataframe

考虑下面的数据框newDat

Date1 <- seq(from = as.POSIXct("2010-05-01 02:00"), 
             to = as.POSIXct("2010-05-02 22:00"), by = 3600)
Dat <- data.frame(DateTime = Date1,
                   x1 = rnorm(length(Date1)))

Date2 <- seq(from = as.POSIXct("2010-05-03 02:00"), 
             to = as.POSIXct("2010-05-03 07:00"), by = 3600)
Dat2 <- data.frame(DateTime = Date2,
                  x1 = rnorm(length(Date2)))

newDat = rbind(Dat,Dat2)

我想生成一个新的数据框,其中只包含在给定日期内记录的测量数超过12的日期。在这个特定的例子中,显示的最后一天即2010-05-03应该被忽略,因为只记录了6次测量,所有其他日子应该保留。如何才能做到这一点?

1 个答案:

答案 0 :(得分:3)

以下是data.table方法:

library(data.table)
new.dt <- data.table(newDat)
subst <- new.dt[ , if (.N >= 12) x1, by=format(DateTime, "%Y-%m-%d")]

以下是在基础R中使用table的方法:

newDat$date <- format(newDat$DateTime, format="%Y-%m-%d")
keep <- names(which(table(newDat$date) >= 12))
new.dt <- newDat[which(newDat$date %in% keep), ]