我确实有这个问题中解释的类似问题。与那个问题类似,我有一个包含 3 列(id、group、value)的数据框。我想从每组中抽取 n 个带有替换的样本,并生成一个较小的数据框,其中包含来自每组的 n 个样本。
但是,我在模拟代码中做了数百个子样本,并且基于 ddply 的解决方案在我的代码中使用起来非常慢。我尝试重写一个简单的代码,看看我是否可以获得更好的性能,但它仍然很慢(如果不是更差的话,也不比 ddply 解决方案好)。下面是我的代码。我想知道它是否可以提高性能
#Producing example DataFrame
dfsize <- 10
groupsize <- 7
test.frame.1 <- data.frame(id = 1:dfsize, group = rep(1:groupsize,each = ceiling(dfsize/groupsize))[1:dfsize], junkdata = sample(1:10000, size =dfsize))
#Main function for subsampling
sample.from.group<- function(df, dfgroup, size, replace){
outputsize <- 1
newdf <-df # assuming a sample cannot be larger than the original
uniquegroups <- unique(dfgroup)
for (uniquegroup in uniquegroups){
dataforgroup <- which(dfgroup==uniquegroup)
mysubsample <- df[sample(dataforgroup, size, replace),]
sizeofsample <- nrow(mysubsample)
newdf[outputsize:(outputsize+sizeofsample-1), ] <- mysubsample
outputsize <- outputsize + sizeofsample
}
return(newdf[1:(outputsize-1),])
}
#Using the function
sample.from.group(test.frame.1, test.frame.1$group, 100, replace = TRUE)