2014-02-20 4 views
1

У меня есть вопрос, что я надеюсь, что некоторые из них помогут мне ответить. У меня есть набор данных, упорядоченный паразитами и год, который выглядит примерно так (фактический набор данных гораздо больше):выбор наблюдений на основе условия зависит от сгруппированной переменной

parasites  year  samples  
    1000   2000  11 
    910   2000  22   
    878   2000  13 
    999   2002  64 
    910   2002  75 
    710   2002  16 
    890   2004  29 
    810   2004  10 
    789   2004   9 
    876   2005  120 
    750   2005   12 
    624   2005  157 

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

parasites  year  samples  
    1000   2000   11 
    910   2000   22 
    999   2002   64 
    910   2002   75 
    890   2004   29 
    810   2004   10 
    876   2005  120 
    750   2005   12 

Я новичок в программировании в целом и по-прежнему пытается найти свой путь вокруг Р. может кто-то пожалуйста, объясните мне, как Я бы об этом подумал? Спасибо.

ответ

1

Как насчет с data.table:

parasites<-read.table(header=T,text="parasites  year  samples 
1000   2000  11 
910   2000  22 
878   2000  13 
999   2002  64 
910   2002  75 
710   2002  16 
890   2004  29 
810   2004  10 
789   2004   9 
876   2005  120 
750   2005   12 
624   2005  157") 

EDIT - извините, отсортированных паразитами, а не образцы

require(data.table) 
data.table(parasites)[,.SD[order(-parasites)][1:2],by="year"] 

Примечание .SD является суб-таблицы для каждого year значения, как указано в by=

year parasites samples 
1: 2000  1000  11 
2: 2000  910  22 
3: 2002  999  64 
4: 2002  910  75 
5: 2004  890  29 
6: 2004  810  10 
7: 2005  876  120 
8: 2005  750  12 
+0

Спасибо за быстрый ответ. Он отлично работает. – user3260086

1

Вот R-щелочной раствор (если это необходимо):

data = data.frame("parasites"=c(1000,910,878,999,910,710,890,910,789,876,750,624), 
        "year"=c(2000,2000,2000,2002,2002,2002,2004,2004,2004,2005,2005,2005), 
        "samples"=c(11,22,13,64,75,16,29,10,9,120,12,157)) 

data = data[order(data$year,data$samples),] 

data_list = lapply(unique(data$year),function(x) (tail(data[data$year==x,],n=2))) 

final_data = do.call(rbind, Map(as.data.frame,data_list)) 

Надежда, что помогает!

+0

это немного сложнее, но работает. Большое спасибо за вашу помощь. – user3260086

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