2015-01-26 75 views
-2

我想用R來取樣我的數據幀。我的數據是流行病學數據的時間戳,我想每年隨機抽樣至少1條和多達10條記錄,最好按照每年記錄數的方式進行抽樣。我想將結果導出爲csv。我想用R來取樣我的時間戳數據幀

這裏是我的數據集的幾行,其中我爲每條記錄留下了長的基因序列字段。

year matrix USD clade 
1958 W mG018U UP 
1958 W mG018U UP 
1958 W mG018U UP 
1966 UN mG140L LL 
1969 UN mG207L LL 
1969 UN mG013L LL 
1971 UN mG208L LL 
1972 HA mG129M MN 
1973 C1 mG018U UP 
1973 NA mG001U UC 
1973 NA mG001U UC 

所有我已經學會了做的是

sample(mydata, size = 600, replace = FALSE) 

這當然並不需要一年考慮。

+2

請顯示您的數據集的幾行。 – akrun 2015-01-26 19:03:09

+4

請提供一個示例數據框和一些您想要的輸出示例,以便人們可以幫助您。 http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – keegan 2015-01-26 19:03:12

+1

你的問題是什麼? – Bonifacio2 2015-01-26 19:03:58

回答

1

每組運行sample有許多可能性(例如dplyr包中的sample_n),下面是使用data.table包的說明。

您可以設置一小部分,比方說0.1,您要抽取每年的記錄數量,因此大小將是相對的,如果此分數小於1,則將其包含在ceiling中,並使用min函數限制爲每組最多10個,例如

library(data.table) 
setDT(df)[, .SD[sample(.N, min(10, ceiling(.N*.1)))], year] 
# year matrix USD clade 
#1: 1958  W mG018U UP 
#2: 1966  UN mG140L LL 
#3: 1969  UN mG013L LL 
#4: 1971  UN mG208L LL 
#5: 1972  HA mG129M MN 
#6: 1973  NA mG001U UC 
+0

謝謝大衛,我現在試圖解析你的建議。但是我的R(3.0.2)版本沒有data.table包,但是? – user21068 2015-01-30 21:43:54

+0

.N是什麼意思?我正在瞄準的是0.1分數嗎? – user21068 2015-01-30 22:59:40

+0

'data.table'是一個包。您需要先使用install.packages(「data.table」)安裝它,然後才能運行上面的代碼。 '。N'表示每個組中的觀察次數,參見'?data.table'。 – 2015-01-31 18:44:12