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

簡単なアプローチは、1 日あたりのデータ ポイントの数を使用as.Dateして把握することです。table手動のソリューションは次のようになります。

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 に答える