Comptage des observations dans la plage de dates R
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 countingfunction
qui 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 tweets
ou dans ce cas 2 avec des décomptes pour chacun des événements ADLData
survenus au cours des 7 derniers jours à compter de la date de tweets
. Dans ce cas, c(2,1)
.
Réponses
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.
Vous pouvez écrire countingfunction
à l'aide de outer
et 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 POSIXct
comme 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