время биннинга и расчета взвешенных средних - PullRequest
2 голосов
/ 19 февраля 2012

У меня есть фрейм данных, который выглядит следующим образом (8 столбцов - столбец myPOSIX имеет формат '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

Моя цель состоит в том, чтобы объединить обнаружения в часовые бункеры. Затем для каждого временного интервала я хотел бы рассчитать средневзвешенные значения для широты и долготы, используя количество обнаружений на приемник в качестве меры взвешивания (то есть частоту различных имен приемников в каждом элементе). Любое понимание будет с благодарностью - я пытался разработать код, используя пакет zoo и xts для агрегации почасовых обнаружений, но безуспешно.

1 Ответ

1 голос
/ 20 февраля 2012
# 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))
...