1

我有一个 data.frame 如下:

Dat1 <- data.frame(dateTime = as.POSIXct(c("2012-05-03 00:00","2012-05-03 02:00",
                                           "2012-05-03 02:30","2012-05-03 05:00",
                                           "2012-05-03 07:00","2012-05-04 07:00"), 
                                         tz = 'UTC'),x1 = rnorm(6))

给予:

> Dat1
             dateTime         x1
1 2012-05-03 00:00:00 -0.3529501
2 2012-05-03 02:00:00  1.9086742
3 2012-05-03 02:30:00 -0.4707939
4 2012-05-03 05:00:00 -1.7001035
5 2012-05-03 07:00:00 -1.3389383
6 2012-05-04 07:00:00  0.6985237

我想将此 data.frame 减少为仅包含给定日期超过 n 点的行。所以,如果我说 n = 2,Dat1 应该减少到:

> Dat1
             dateTime         x1
1 2012-05-03 00:00:00 -0.3529501
2 2012-05-03 02:00:00  1.9086742
3 2012-05-03 02:30:00 -0.4707939
4 2012-05-03 05:00:00 -1.7001035
5 2012-05-03 07:00:00 -1.3389383

我希望这对任意数量的列的 data.frame 有用,而不仅仅是对于这个例子。

4

1 回答 1

1

一种直接的方法是使用as.Datetable计算出每天的数据点数量。手动解决方案可能如下所示:

n <- 2
Dat1[as.character(as.Date(Dat1$dateTime)) %in% 
       names(which(table(as.Date(Dat1$dateTime)) >= n)), ]

使用它,您还可以创建一个基本功能,如果这是您想要经常做的事情并且如果您想更改某些参数。这是一个快速尝试的功能:

DateThreshold <- function(input, datevar, threshold) {
  datevar <- as.character(as.Date(input[[datevar]]))
  datevar.tab <- names(which(table(datevar) >= threshold))
  input[datevar %in% datevar.tab, ]
}

您的示例数据的使用情况如下:

DateThreshold(Dat1, "dateTime", 2)
#              dateTime          x1
# 1 2012-05-03 00:00:00 -0.36532709
# 2 2012-05-03 02:00:00 -0.52474466
# 3 2012-05-03 02:30:00 -0.06044233
# 4 2012-05-03 05:00:00  0.51963463
# 5 2012-05-03 07:00:00 -0.34407808
于 2013-05-31T10:18:19.610 回答