2017-02-08 3 views
0

У меня есть таблица с информацией о нарушениях драйверов и значениях нарушений. У меня есть два столбца Значение (нарушения) и год (нарушения). За каждый год нарушения у меня есть несколько значений. Годы идут с 2000-2014 гг.Как создать функцию, которая вычисляет и извлекает значение из таблицы?

Мне нужна функция, которая может получить общее количество нарушений за «заданный» год. I.e., когда пользователь вводит год, получайте информацию только в этом году. До сих пор я могу только управлять, чтобы получить информацию о всех лет, в то же время

Я попытался это:

total_year <- function(x=infractions$year){ 
    aggregate(infractions$value ~ infractions$year_deb, FUN=sum, na.rm = TRUE) 
} 

Тогда я типа

total_year(2012) 

и я получаю таблицу проступки за год вербуя все годы, но я хочу только в общей сложности на 2012

Мой стол выглядит следующим образом:

 value year 
375714 1,00 2011 
375715 0,00 2012 
375716 0,00 2013 
375717 0,00 2014 
375738 12,00 2011 
375739 7,00 2012 
375740 2,00 2013 
375741 4,00 2014 
375762 23,00 2011 
375763 14,00 2012 
375764 18,00 2013 
375765 7,00 2014 
375786 6,00 2011 
375787 4,00 2012 
375788 2,00 2013 
375789 5,00 2014 
375810 0,00 2011 
375811 0,00 2012 
375812 0,00 2013 
+0

Вы хотите, чтобы сумма _number_ нарушений с того года? Или список нарушений с того года? Кроме того, вам удастся получить ответ (и быстро получить его), если вы можете дать воспроизводимый пример (см. [Здесь] (http://stackoverflow.com/questions/5963269/how-to-make-a- большой-r-воспроизводимый пример)) для других, чтобы работать с – Craig

+0

да, общее количество нарушений с этого года. Т.е.: общее количество нарушений за год (2012). Постараюсь воспроизвести пример –

+0

значение года 375714 1,00 2011 375715 0,00 2012 375716 0,00 2013 375717 0,00 2014 375738 12,00 2011 375739 7,00 2012 375740 2, 00 2013 375741 4,00 2014 375762 23,00 2011 375763 14,00 2012 375764 18,00 2013 375765 7,00 2014 375786 6,00 2011 375787 4,00 2012 375788 2,00 2013 375789 5,00 2014 375810 0,00 2011 375811 0,00 2012 375812 0,00 2013 –

ответ

0

Вот еще одно решение с использованием dplyr

данных

set.seed(123) 

df <- data.frame(value = sample(c("speeding", "parking", "dui"), 45, replace = T), 
       year = rep(2000:2014, 3)) 

Функция

library(dplyr) 

total_year <- function(data, x) { 
    data %>% 
    filter(year == x) %>% 
    group_by(year) %>% 
    summarize(inf = length(unique(value))) %>% 
    ungroup 
} 

Использование

total_year(df, 2014) 
#  year inf 
#  <int> <int> 
# 1 2014  1 
+0

Прохладный пакет! спасибо за решение :) –

+0

Рад, что это полезно. Если вы найдете ответ полезным, убедитесь, что его можно увеличить на стороне. – Craig

Смежные вопросы