2015-02-27 5 views
1

Я пытаюсь подсчитать количество строк со значениями fcoli> 15 и создать вектор, сортирующий их по годам.Сортировка по году по критерию по R

Некоторые образцы данных:

Year <- c(1996,1996,1997,19971998,1999,1999,1999) 
fcoli <- c(45,13,96,10,52,53,64,5) 
sample <- data.frame(Year,fcoli) 

я смог подсчитать количество строк один год за один раз с помощью:

nrow(subset(sample, sample$fcoli > 15 & sample$Year == 1996)) 

Однако я не был в состоянии использовать этот критерий производят подсчеты за все годы сразу. Мои фактические данные состоят из более чем 20-летних данных, поэтому я бы предпочел не вручную перебирать этот код за каждый год.

Любые предложения? Благодаря!

+0

Вы хотите рассчитывать количество 'fcoli> 15' за каждый год? Помогает ли это 'aggregate (fcoli ~ Year, sample, function (x) sum (x> 15)) '? –

+0

Вы можете сделать sapply (split (sample $ fcoli, sample $ Year), function (z) sum (z> 15)) ' –

ответ

2

Вот достаточно простой ответ.

Year <- c(1996,1996,1997,1997,1998,1999,1999,1999) 
fcoli <- c(45,13,96,10,52,53,64,5) 
sample <- data.frame(Year,fcoli) 
aggregate(fcoli~Year,FUN=length,data=sample[sample$fcoli>15,]) 
+0

Или, альтернативно, 'aggregate (fcoli> 15 ~ Year, sample, sum)' (поскольку вы можете суммировать логические значения, чтобы найти количество ИСТИННЫХ значений) – MrFlick

+0

Спасибо! Совокупная функция - именно то, что мне нужно. – keta

0
library(dplyr) 
df1%>% #df1 is yor data frame 
filter(fcoli>15) %>% 
group_by(Year)%>% 
summarise(freq=n()) 

Source: local data frame [4 x 2] 

    Year freq 
1 1996 1 
2 1997 1 
3 1998 1 
4 1999 2 
+0

После' filter (fcoli> 15) ',' count (Year) 'может быть другим вариант. – jazzurro

+0

Согласен. Это может быть другой вариант. Благодарю. – Metrics

+0

Или 'sample%>% filter (fcoli> 15)%>% group_by (Year)%>% tally()' –

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