Comptage des observations dans la plage de dates R

Aug 16 2020

Cela a probablement une solution très simple. J'ai deux jeux de données. L'un est un vecteur d'horodatages de tweet POSIXct et le second est un vecteur d'horodatages POSIXct ADL HEAT Map.

Je cherche à créer une fonction qui me permette de prendre les dates du vecteur de tweets et pour chacun de compter le nombre d'horodatages dans le vecteur ADL HEAT Map qui se situent dans une plage spécifiée du tweet.

Mon objectif est de construire la fonction de telle sorte que je puisse mettre dans le vecteur de tweets, le vecteur ADL, le nombre de jours à partir du vecteur de tweets pour commencer à compter, et le nombre de jours à partir du vecteur de tweets pour arrêter de compter et renvoyer un vecteur of compte la même longueur que les données des tweets.

J'ai déjà essayé la solution ici, et cela n'a pas fonctionné : compter le nombre d'occurrences dans la plage de dates dans R

Voici un exemple de ce que j'essaie de faire. Voici une version réduite des ensembles de données que j'utilise :

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

Je veux créer une fonction, appelons-la countingfunctionqui me permet de saisir le premier ensemble de données, le second, et d'appeler un certain nombre de jours pour revenir en arrière. Dans cet exemple, j'ai choisi 7 jours :

countingfunction(tweets, ADLData, 7)

Idéalement, cela renverrait un vecteur de la longueur de tweetsou dans ce cas 2 avec des décomptes pour chacun des événements ADLDatasurvenus au cours des 7 derniers jours à compter de la date de tweets. Dans ce cas, c(2,1).

Réponses

YannikSuhre Aug 16 2020 at 21:12

Donc, si je vous ai bien compris, vous avez ce genre de données :

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

Et ce que vous voulez faire, c'est dire si un tweet est dans la plage de dates ADL ou non. Cela pourrait être accompli en faisant ceci:

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

Vous pouvez l'affecter facilement à un autre vecteur, qui indique alors s'il est présent ou non.

RonakShah Aug 20 2020 at 15:23

Vous pouvez écrire countingfunctionà l'aide de outeret calculer la différence de temps entre chaque valeur de deux vecteurs en utilisant difftime.

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

En supposant que vous ayez des vecteurs de classe POSIXctcomme ceux-ci :

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

Vous pouvez les passer comme :

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