R - 用于多个不同大小的重采样的任何函数

时间:2015-11-16 03:58:02

标签: r

有没有任何功能可以解决这种不同大小的随机重采样问题?例如,给定一个向量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循环就会容易得多。

1 个答案:

答案 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))]
}