2015-01-26 42 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