0

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 个测量值,所有其他日期都应保留。如何才能做到这一点?

4

1 回答 1

3

这是一个data.table方法:

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

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

newDat$date <- format(newDat$DateTime, format="%Y-%m-%d")
keep <- names(which(table(newDat$date) >= 12))
new.dt <- newDat[which(newDat$date %in% keep), ]
于 2013-07-20T21:18:15.490 回答