Liczenie obserwacji w zakresie dat R.

Aug 16 2020

To prawdopodobnie ma naprawdę proste rozwiązanie. Mam dwa zestawy danych. Jeden jest wektorem POSIXct znaczników czasu tweetów, a drugi jest wektorem znaczników czasu POSIXct ADL HEAT Map.

Chcę zbudować funkcję, która pozwoli mi pobrać daty z wektora tweetów i dla każdego z nich policzyć liczbę znaczników czasu w wektorze mapy ADL HEAT, które mieszczą się w określonym zakresie z tweeta.

Moim celem jest zbudowanie funkcji w taki sposób, że mogę wstawić wektor tweetów, wektor ADL, liczbę dni od wektora tweetów do rozpoczęcia zliczania oraz liczbę dni od wektora tweetów do zatrzymania liczenia i zwrócenia wektora z liczy taką samą długość jak dane w tweetach.

Wypróbowałem już tutaj rozwiązanie i nie zadziałało: Policz liczbę wystąpień w zakresie dat w R

Oto przykład tego, co próbuję zrobić. Oto mniejsza wersja zestawów danych, których używam:

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

Chcę utworzyć funkcję, nazwijmy ją, countingfunctionktóra pozwoli mi wprowadzić pierwszy zestaw danych, drugi i wywołać liczbę dni, aby spojrzeć wstecz. W tym przykładzie wybrałem 7 dni:

countingfunction(tweets, ADLData, 7)

W idealnym przypadku zwróciłoby to wektor o długości tweetslub w tym przypadku 2 z liczbami dla każdego z liczby zdarzeń w ADLDataciągu ostatnich 7 dni od daty w tweets. W tym przypadku c(2,1).

Odpowiedzi

YannikSuhre Aug 16 2020 at 21:12

Tak więc, jeśli dobrze cię zrozumiałem, masz tego rodzaju dane:

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

A to, co chcesz zrobić, to powiedzieć, czy tweet należy do zakresu dat ADL, czy nie. Można to osiągnąć, wykonując następujące czynności:

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

Możesz to łatwo przypisać do innego wektora, który następnie określa, czy jest w, czy nie.

RonakShah Aug 20 2020 at 15:23

Możesz pisać countingfunctionza pomocą outeri obliczać różnicę czasu między każdą wartością dwóch wektorów za pomocą difftime.

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

Zakładając, że masz wektory POSIXcttakiej klasy :

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

Możesz je przekazać jako:

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