2 votes

le regroupement temporel et le calcul des moyennes pondérées

J'ai un cadre de données qui se présente comme suit (8 colonnes - la colonne myPOSIX est au format 'y-m-d h:s')

head(new)
Date.and.Time..UTC.    Receiver    Transmitter Latitude Longitude ndiffs29912  flag             
1    07/10/2010 15:53 VR2W-107619 A69-1303-29912 48.56225 -53.89144          NA FALSE 2010-10-07 
2    07/10/2010 15:56 VR2W-107619 A69-1303-29912 48.56225 -53.89144         180 FALSE 2010-10-07 
3    07/10/2010 16:00 VR2W-107619 A69-1303-29912 48.56225 -53.89144         240 FALSE 2010-10-07 
4    07/10/2010 16:24 VR2W-107619 A69-1303-29912 48.56225 -53.89144        1440 FALSE 2010-10-07 
5    07/10/2010 16:45 VR2W-104556 A69-1303-29912 48.56460 -53.88956        1260 FALSE 2010-10-07 
6    07/10/2010 16:47 VR2W-107619 A69-1303-29912 48.56225 -53.89144         120 FALSE 2010-10-07  
myPOSIX
15:53:00
15:56:00
16:00:00
16:24:00
16:45:00
16:47:00

Mon but est de classer les détections par tranches d'heures. Ensuite, pour chaque tranche de temps, je voudrais calculer des moyennes pondérées pour la latitude et la longitude, en utilisant le nombre de détections par récepteur comme mesure de pondération (c'est-à-dire la fréquence des différents noms de récepteur dans chaque tranche). J'ai essayé d'élaborer un code utilisant le paquet zoo et xts pour agréger les détections horaires, mais je n'ai pas réussi.

1voto

Brandon Bertelsen Points 13424
# Dummy data
x <- data.frame(
  date=as.POSIXct(1:10000,origin="2005-01-01 12:00:00"),
receiver=rep(letters[1:10],1000),
  Latitude=rep(letters[1:10],1000),
  Longitude=rep(letters[1:10],1000),
  ndiffs29912=rnorm(10000)+10)

# Break dates into hours using cut append to data frame
x$hour <- cut(x$date, breaks="hour")

library(plyr) 
# By hour and latitude, get weighted
# mean of ndiffs based on number of receivers
ddply(x, .(hour, latitude), function(x) data.frame(
weighted.mean(x$ndiffs29912, length(x$receiver), na.rm=T))

# By hour and longitude, get weighted
# mean of ndiffs based on number of receivers
ddply(x, .(hour, longitude), function(x) data.frame(
weighted.mean(x$ndiffs29912, length(x$receiver), na.rm=T))

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X