需要随机抽样具有多个组的数据集,每个组具有多个因子

时间:2015-03-03 23:32:57

标签: r

更新的问题 我忽略了在我原来的问题中包含一个重要方面。 @Jthorpe提供的代码适用于STUFF的一列。但是,根据我的数据集,我将在1到70列之间随机抽样。在我更新的示例中,我添加了3列STUFF。因此,我需要group_by SITEDATE,然后一次sampleSTUFF的多列中随机RESULT。请注意STUFF表如何保留RESULT列中的数据顺序。例如,DATA表中的前两行都是2,4,8,对应于DATA = data.frame(SITE = c("A","A","A","A","B","B","B","C","C"), DATE = c("1","1","2","2","3","3","3","4","4"), STUFF = c(1, 2, 30, 40, 100, 200, 300, 5000, 6000), STUFF2 = c(2, 4, 60, 80, 200, 400, 600, 10000, 12000), STUFF3 = c(4, 8, 120, 160, 400, 800, 1200, 20000, 24000)) RESULT = data.frame(SITE = c("A","A","A","A","B","B","B","C","C"), DATE = c("1","1","2","2","3","3","3","4","4"), STUFF = c(2, 2, 30, 30, 200, 300, 300, 6000, 5000), STUFF2 = c(4, 4, 60, 60, 400, 600, 600, 12000, 10000), STUFF3 = c(8, 8, 120, 120, 800, 1200, 1200, 24000, 20000)) 表中的第2行。我希望这很清楚。再次感谢。

原始问题 我需要伪复制一个可能有多个组的数据集。此外,每个组可能有多个因素。我编写了使用for循环的代码来对数据集进行子集化,然后随机对子集进行采样,然后将重采样数据集重组为新表。我想使用一些更优雅和灵活的代码。我已经尝试使用dplyr(例如,group_by和sample_n函数),但是在获取代码以正确处理因子中的变量长度方面遇到了麻烦。我附上了一个示例数据集和所需的结果。提前感谢您的帮助。

{{1}}

2 个答案:

答案 0 :(得分:4)

dplyr解决方案:

RESULT <- DATA %>% group_by(SITE,DATE) %>% mutate(STUFF=sample(STUFF,replace= TRUE))

答案 1 :(得分:1)

这是一个简单的data.table方法

library(data.table)
setDT(DATA)[, sample(STUFF, replace = TRUE), by = .(SITE, DATE)]
相关问题