Conteo de observaciones dentro del rango de fechas R

Aug 16 2020

Esto probablemente tiene una solución realmente simple. Tengo dos conjuntos de datos. Uno es un vector de marcas de tiempo de tweet POSIXct y el segundo es un vector de marcas de tiempo de mapa de calor ADL POSIXct.

Estoy buscando crear una función que me permita tomar las fechas del vector de tweets y para cada uno contar la cantidad de marcas de tiempo en el vector ADL HEAT Map que se encuentran dentro de un rango específico del tweet.

Mi objetivo es construir la función de modo que pueda poner el vector de tweets, el vector ADL, la cantidad de días desde el vector de tweets para comenzar a contar, y la cantidad de días desde el vector de tweets para dejar de contar, y devolver un vector de cuenta con la misma longitud que los datos de los tweets.

Ya probé la solución aquí, y no funcionó: cuente el número de ocurrencias en el rango de fechas en R

Aquí hay un ejemplo de lo que estoy tratando de hacer. Aquí hay una versión más pequeña de los conjuntos de datos que estoy usando:

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

Quiero crear una función, llamémosla countingfunctionque me permita ingresar el primer conjunto de datos, el segundo y llamar a una cantidad de días para mirar hacia atrás. En este ejemplo, elegí 7 días:

countingfunction(tweets, ADLData, 7)

Idealmente, esto devolvería un vector de la longitud de tweetso, en este caso, 2 con recuentos para cada uno de los eventos que ADLDataocurrieron en los últimos 7 días a partir de la fecha en tweets. En este caso, c(2,1).

Respuestas

YannikSuhre Aug 16 2020 at 21:12

Entonces, si te he entendido bien, tienes ese tipo de datos:

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

Y lo que quieres hacer es decir si un tweet está dentro del rango de fechas ADL o no. Eso podría lograrse haciendo esto:

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

Puede asignar esto fácilmente a otro vector, que luego indica si está o no.

RonakShah Aug 20 2020 at 15:23

Puedes escribir countingfunctioncon la ayuda de outery calcular la diferencia de tiempo entre cada valor de dos vectores usando difftime.

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

Suponiendo que tiene vectores de clase POSIXctcomo estos:

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

Puedes pasarlos como:

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