dplyr:行块的随机抽样程序(多个分组变量和数据列)

时间:2016-05-03 23:52:53

标签: r dplyr

我的数据集包含1到70列数据,包含1到5列ID变量。我需要按ID变量进行分组,然后在ID变量中随机抽取行块。重新采样的数据集需要与原始数据集的长度相同。

以下是使用所需RESULT表设置的示例DATA。因此,我需要按SITEDATE进行分组,然后随机抽样与每个aqun/aterr相关联的块。 {1}}。请注意结果表格中INDIV订单的保留方式(例如CATEGORYaqun/a)。

我需要使用terr,因为此随机抽样程序会将数据提供给更大的dplyr循环,该循环使用for函数进行各种计算......并且正如你们许多人所知{{1掩盖其他包中的各种函数。我为将原始表复制并粘贴到这个问题而道歉,但这是复制数据集复杂性的最简单方法。提前致谢。

DATA

dplyr

RESULT

dplyr

2 个答案:

答案 0 :(得分:1)

这听起来像你想要的......

library(dplyr)
dat <- group_by(DATA, SAMPLE, CATEGORY)
sample_df <- distinct(sample_n(dat, 3, replace = T))

但我认为这更有意义......

dat <- group_by(DATA, CATEGORY)
sample_df <- sample_n(dat, 3)

然后,我不知道完全你想要什么。希望这会有所帮助。

答案 1 :(得分:1)

data.table

library(data.table)
setDT(DATA, key = "SAMPLE")

set.seed(12030)
DATA[.(sample(unique(SAMPLE), rep = TRUE))]
#    SAMPLE CATEGORY BIOMASS
# 1:      B        1      10
# 2:      B        2      10
# 3:      B        3      10
# 4:      B        1      10
# 5:      B        2      10
# 6:      B        3      10
# 7:      A        1       1
# 8:      A        2       1
# 9:      A        3       1

如果你自我引导(我怀疑你是)并计划多次重复,那么首先分配你的随机化块会更有效率:

RB <- DATA[ , unique(SAMPLE)]
#repeat BB times
replicate(BB, DATA[.(sample(RB, rep = TRUE))])