2014-02-20 38 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 

我的新節目作爲一個整體,仍然試圖找到我的身邊R.方式可有人請向我解釋如何我會去做這件事?非常感謝。

回答

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") 

編輯 - 對不起寄生蟲排序,不是樣品

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

相關問題