2015-05-21 2 views
1

Я следующую структуру данных:экстракт сгруппированы Подмножество с условием

Group Count Value 
1  1  1000 
1  10 2000 
2  6  1000 
2  7  2000 

Некоторые группы, которые имеют значение счетчика и значение данных. Теперь мне нужны только те строки, где count > 0.25 * sum(count of group). Например, группа 1 имеет sum(count) = 11, поэтому первая строка не должна включаться в результат.

Результат должен выглядеть следующим образом:

Group Count Value 
1  10 2000 
2  6  1000 
2  7  2000 

Как я могу это сделать в R?

Кроме того, у моего набора данных есть около 5 миллионов строк. Поэтому, пожалуйста, подумайте о производительности.

ответ

3

С выборки данных

dd<-read.table(text="Group Count Value 
1  1  1000 
1  10 2000 
2  6  1000 
2  7  2000", header=T) 

вы можете сделать это с базой R

subset(dd, Count>.25*ave(Count, Group, FUN=sum)) 

или dplyr библиотеки

library(dplyr) 
dd %>% group_by(Group) %>% filter(Count > .25 * sum(Count)) 

, возможно, вы найдете еще один читаемым. Оба retrun

Group Count Value 
2  1 10 2000 
3  2  6 1000 
4  2  7 2000 
+0

Awesome. Я собирался опубликовать то же самое. :) Хорошая работа! –

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