有没有任何功能可以解决这种不同大小的随机重采样问题?例如,给定一个向量data = c('a','a','b','c','d','e')
。我想随机将此矢量重新采样为3组,分别具有不同的大小1,3,2。像
input: samplefunc(data,size = c(1,3,2))
output: c('a') c('a','d','e') c('b','c')
我只发现了这个"样本"功能,但它只适用于一个尺寸的样品:
sample(x, size, replace = FALSE, prob = NULL)
size: a non-negative integer giving the number of items to choose.
由于我必须将数据划分为多个组(而不仅仅是3个),如果存在一个已存在的函数可以做到这一点,那么没有for循环就会容易得多。
答案 0 :(得分:3)
您可以使用lapply
轻松编写自己的函数,这样会返回list
个样本:
samplefunc <- function(vec, size, ...) lapply(size, function(x) sample(vec, x, ...))
用法如你所想:
samplefunc(data, c(1, 3, 2))
正如@thelatemail建议的那样,如果你想在没有替换的情况下进行抽样,你可以尝试将samplefunc
定义为:
samplefunc <- function(vec, size) {
temp <- split(vec, sample(rep(size, size)))
temp[match(names(temp), as.character(size))]
}