更新的问题
我忽略了在我原来的问题中包含一个重要方面。 @Jthorpe提供的代码适用于STUFF
的一列。但是,根据我的数据集,我将在1到70列之间随机抽样。在我更新的示例中,我添加了3列STUFF
。因此,我需要group_by
SITE
和DATE
,然后一次sample
从STUFF
的多列中随机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}}
答案 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)]