Среднее количество аварий в неделю в зоне в R - PullRequest
0 голосов
/ 03 октября 2018

у меня есть набор данных, такой как ниже:

CRASH       CRASH_DATE  geoid          CRASH_TIME
41259861    2015-12-24  2502312044025   1056
41243891    2015-12-19  2502312044025   559
41243791    2015-12-17  2502312044025   1436
41256041    2015-12-22  2502312044007   1647
41255881    2015-12-17  2502312044007   2022
...

мой окончательный выходной кадр данных выглядит так:

    geoid           average_per_week   variance_per_week
    2502312044025       x                 t
    2502312044007       y                 v
...

я хочу вариировать и среднее число аварий в неделю в зонеМоя первая попытка выглядит следующим образом:

aggregate(Crash[["geoid"]],by=list(week(Crash[["CRASH_DATE"]])),mean)

, но выдает ошибку.

1 Ответ

0 голосов
/ 04 октября 2018
library(dplyr); library(lubridate)
options(scipen = 99) # To display geoid w/o scientific notation.

# Step 0. Load data
df <- read.table(header = T, stringsAsFactors = F,  text = "
CRASH       CRASH_DATE  geoid          CRASH_TIME
41259861    2015-12-24  2502312044025   1056
41243891    2015-12-19  2502312044025   559
41243791    2015-12-17  2502312044025   1436
41256041    2015-12-22  2502312044007   1647
41255881    2015-12-17  2502312044007   2022") %>%

# Step 1. Count incidents by geoid and week
  group_by(geoid, week = floor_date(ymd(CRASH_DATE), "1 week")) %>%
  tally() %>%

# Step 2. Calc avg and variance. Note, if there are gaps in between incidents
# and you want to use a common time span, you might want to add
# padr::pad() here, with start_val etc.
  summarize(avg = mean(n), variance = var(n))


> df
# A tibble: 2 x 3
          geoid   avg variance
          <dbl> <dbl>    <dbl>
1 2502312044007   1        0  
2 2502312044025   1.5      0.5
...