Conteggio delle osservazioni all'interno dell'intervallo di date R

Aug 16 2020

Questo probabilmente ha una soluzione molto semplice. Ho due set di dati. Uno è un vettore di timestamp tweet POSIXct e il secondo è un vettore di timestamp POSIXct ADL HEAT Map.

Sto cercando di creare una funzione che mi consenta di prendere le date dal vettore dei tweet e per ognuna contare il numero di timestamp nel vettore ADL HEAT Map che rientrano in un intervallo specificato dal tweet.

Il mio obiettivo è costruire la funzione in modo tale da poter inserire il vettore dei tweet, il vettore ADL, il numero di giorni dal vettore dei tweet per iniziare a contare e il numero di giorni dal vettore dei tweet per interrompere il conteggio e restituire un vettore di conta la stessa lunghezza dei dati dei tweet.

Ho già provato la soluzione qui e non ha funzionato: conta il numero di occorrenze nell'intervallo di date in R

Ecco un esempio di quello che sto cercando di fare. Ecco una versione ridotta dei set di dati che sto utilizzando:

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

Voglio creare una funzione, chiamiamola countingfunctionche mi consenta di inserire il primo set di dati, il secondo e chiamare un numero di giorni per guardare indietro. In questo esempio, ho scelto 7 giorni:

countingfunction(tweets, ADLData, 7)

Idealmente questo restituirebbe un vettore della lunghezza di tweetso in questo caso 2 con conteggi per ciascuno di quanti eventi ADLDatasi sono verificati negli ultimi 7 giorni dalla data in tweets. In questo caso, c(2,1).

Risposte

YannikSuhre Aug 16 2020 at 21:12

Quindi, se ho capito bene, hai questo tipo di dati:

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

E quello che vuoi fare è dire se un tweet rientra o meno nell'intervallo di date ADL. Ciò potrebbe essere ottenuto facendo questo:

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

Puoi assegnarlo facilmente a un altro vettore, che quindi indica se è presente o meno.

RonakShah Aug 20 2020 at 15:23

Puoi scrivere countingfunctioncon l'aiuto di outere calcolare la differenza di tempo tra ogni valore di due vettori usando difftime.

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

Supponendo di avere vettori di classe POSIXctcome questi:

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

Puoi passarli come:

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