Агрегирование данных по округам и годам в R - PullRequest
0 голосов
/ 05 марта 2019

У меня есть датафрейм, который выглядит следующим образом:

year <- year
month <- c(1,1,1,1,1,2,2,2,3,3)
county <- c("Upshur", "Upshur", "Upshur", "Collin","Collin","Upshur","Upshur", "Collin","Upshur","Collin")
citation <- c(1,0,1,1,1,0,1,0,1,1)
df <- data.frame(year, month, county, citation)

#  year month county citation 
#1 2007     1 Upshur        1
#2 2007     1 Upshur        0
#3 2007     1 Upshur        1
#4 2007     1 Collin        1
#5 2007     1 Collin        1
#6 2007     2 Upshur        0
#7 2007     2 Upshur        1
#8 2007     2 Collin        0
#9 2007     3 Upshur        1
#102007     3 Collin        1
#...  

Там, где у меня есть отдельные случаи полицейских остановок, в которых указывается, закончилась ли остановка цитатой или билетом на основе того, имеет ли цитирование 1 или 0. ЧтоЯ стремлюсь сделать это объединить эти данные в меньшем кадре данных, где частота билетов и цитирования указывается для каждого округа в каждом месяце.По сути, что-то, что выглядело бы так:

# year month county citations_given warnings_given
  2007     1 Upshur               2              1
  2007     1 Collin               2              0
  2007     2 Upshur               1              0
  2007     2 Collin               0              1
  2007     3 Upshur               1              0
  2007     3 Collin               1              0
...        

Любые предложения будут оценены!

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

Рассмотрим несколько функций в вызове aggregate, используя базовый пакет с очисткой имен столбцов:

agg_df <- setNames(do.call(data.frame,
                  aggregate(citation ~ year + month + county, df, function(x)
                              c(citations_given = sum(x),
                                warnings_given = sum(x==0))
                           )
                  ), c("year", "month", "county", "citations_given", "warnings_given")
          )

agg_df

#   year month county citations_given warnings_given
# 1 2007     1 Collin               2              0
# 2 2007     2 Collin               0              1
# 3 2007     3 Collin               1              0
# 4 2007     1 Upshur               2              1
# 5 2007     2 Upshur               1              1
# 6 2007     3 Upshur               1              0
0 голосов
/ 08 марта 2019

Я настоятельно рекомендую использовать пакет data.table.

library(data.table)
setDT(df)
df[,list(warn_given = sum(citation==0),cite_given = sum(citation)), 
   by=c('year', 'month', 'county')]
0 голосов
/ 05 марта 2019

Я рекомендую dplyr пакет для этого.

library(dplyr)

df %>%
  group_by(year, month, county) %>%
  summarize(citation_given = sum(citation),
            warnings_given = sum(citation == 0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...