Menghitung Pengamatan Dalam Rentang Tanggal R

Aug 16 2020

Ini mungkin memiliki solusi yang sangat sederhana. Saya memiliki dua set data. Salah satunya adalah vektor cap waktu tweet POSIXct dan yang kedua adalah vektor cap waktu POSIXct ADL HEAT Map.

Saya mencari untuk membangun fungsi yang memungkinkan saya mengambil tanggal dari vektor tweet dan untuk masing-masing menghitung jumlah cap waktu dalam vektor ADL HEAT Map yang termasuk dalam kisaran tertentu dari tweet.

Tujuan saya adalah untuk membangun fungsi sedemikian rupa sehingga saya dapat memasukkan vektor tweet, vektor ADL, jumlah hari dari vektor tweet untuk mulai menghitung, dan jumlah hari dari vektor tweet berhenti menghitung, dan mengembalikan vektor hitungan sama panjangnya dengan data tweet.

Saya sudah mencoba solusi di sini, dan tidak berhasil: Hitung jumlah kemunculan dalam rentang tanggal di R.

Inilah contoh dari apa yang saya coba lakukan. Berikut adalah versi lebih kecil dari kumpulan data yang saya gunakan:

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")

Saya ingin membuat sebuah fungsi, sebut saja countingfunctionitu memungkinkan saya memasukkan kumpulan data pertama, yang kedua, dan memanggil beberapa hari untuk melihat ke belakang. Dalam contoh ini, saya memilih 7 hari:

countingfunction(tweets, ADLData, 7)

Idealnya ini akan mengembalikan vektor dengan panjang tweetsatau dalam kasus ini 2 dengan jumlah untuk masing-masing dari berapa banyak peristiwa ADLDataterjadi dalam 7 hari terakhir dari tanggal di tweets. Dalam kasus ini c(2,1),.

Jawaban

YannikSuhre Aug 16 2020 at 21:12

Jadi, jika saya memahami Anda dengan benar, Anda memiliki data semacam itu:

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 = ""))

Dan yang ingin Anda lakukan adalah mengatakan apakah tweet berada dalam rentang tanggal ADL atau tidak. Itu bisa dicapai dengan melakukan ini:

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

Anda dapat menetapkan ini dengan mudah ke vektor lain, yang kemudian menyatakan apakah ada atau tidak.

RonakShah Aug 20 2020 at 15:23

Anda dapat menulis countingfunctiondengan bantuan outerdan menghitung selisih waktu antara setiap nilai dua vektor menggunakan difftime.

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

Dengan asumsi Anda memiliki vektor kelas POSIXctseperti ini:

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

Anda dapat mengopernya sebagai:

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