我的数据集包含1到70列数据,包含1到5列ID变量。我需要按ID变量进行分组,然后在ID变量中随机抽取行块。重新采样的数据集需要与原始数据集的长度相同。
以下是使用所需RESULT表设置的示例DATA。因此,我需要按SITE
和DATE
进行分组,然后随机抽样与每个aqu
,n/a
,terr
相关联的块。 {1}}。请注意结果表格中INDIV
订单的保留方式(例如CATEGORY
,aqu
,n/a
)。
我需要使用terr
,因为此随机抽样程序会将数据提供给更大的dplyr
循环,该循环使用for
函数进行各种计算......并且正如你们许多人所知{{1掩盖其他包中的各种函数。我为将原始表复制并粘贴到这个问题而道歉,但这是复制数据集复杂性的最简单方法。提前致谢。
DATA
dplyr
RESULT
dplyr
答案 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))])