日付範囲R内の観測値のカウント

Aug 16 2020

これはおそらく本当に簡単な解決策を持っています。2つのデータセットがあります。1つはPOSIXctツイートタイムスタンプのベクトルであり、もう1つはPOSIXct ADLHEATマップタイムスタンプのベクトルです。

ツイートベクトルから日付を取得し、それぞれについて、ツイートから指定された範囲内にあるADLヒートマップベクトルのタイムスタンプの数をカウントできる関数を作成しようとしています。

私の目的は、ツイートベクトル、ADLベクトル、ツイートベクトルからカウントを開始するまでの日数、ツイートベクトルからカウントを停止するまでの日数を入力して、ベクトルを返すことができる関数を構築することです。 ofは、ツイートデータと同じ長さをカウントします。

私はすでにここで解決策を試しましたが、うまくいきませんでした:Rの日付範囲での発生数をカウントします

これが私がやろうとしていることの例です。これが私が使用しているデータセットの小さいバージョンです:

tweets <- c("2016-12-12 14:34:00 GMT", "2016-12-5 17:20:06 GMT")
ADLData <- c("2016-12-11 16:30:00 GMT", "2016-12-7 18:00:00 GMT", "2016-12-2 09:10:00 GMT")

関数を作成したいのですがcountingfunction、最初のデータセットと2番目のデータセットを入力し、日数を呼び出して振り返ることができる関数を呼び出しましょう。この例では、7日を選択しました。

countingfunction(tweets, ADLData, 7)

理想的には、これはの長さのベクトル、tweetsまたはこの場合は2を返し、ADLDataの日付から過去7日間に発生したイベントの数ごとにカウントされtweetsます。この場合、c(2,1)

回答

YannikSuhre Aug 16 2020 at 21:12

したがって、私があなたを正しく理解していれば、あなたはその種のデータを持っています:

tweets <- c(as.POSIXct("2020-08-16", tz = ""), as.POSIXct("2020-08-15", tz = ""), as.POSIXct("2020-08-14", tz = ""), as.POSIXct("2020-08-13", tz = ""))
ADL <- c(as.POSIXct("2020-08-15", tz = ""), as.POSIXct("2020-08-14", tz = ""))

そして、あなたがしたいことは、ツイートがADLの日付範囲内にあるかどうかを言うことです。これを行うことで達成できます。

ifelse(tweets %in% ADL, print("its in"), print("its not"))

これを別のベクトルに簡単に割り当てることができます。別のベクトルは、それが含まれているかどうかを示します。

RonakShah Aug 20 2020 at 15:23

あなたは書くことができるcountingfunctionの助けを借りて、outerそして使用して2つのベクトルのすべての値の間の時間差を計算しますdifftime

countingfunction <- function(x1, x2, n) {
  mat <- outer(x1, x2, difftime, units = 'days')  
  rowSums(mat > 0 & mat <= n)
}

POSIXct次のようなクラスのベクトルがあると仮定します。

tweets <- as.POSIXct(c("2016-12-12 14:34:00", "2016-12-5 17:20:06"), tz = 'GMT')
ADLData <- as.POSIXct(c("2016-12-11 16:30:00","2016-12-7 18:00:00", 
                        "2016-12-2 09:10:00"), tz = 'GMT')
n <- 7

あなたはそれらを次のように渡すことができます:

countingfunction(tweets, ADLData, n)
#[1] 2 1