R中的加权采样

ema*_*ele 11 r

我有一个数据框data.在每一行都i分配了一个重量data$ww.现在,我想提出一个样品new_datadata,按加权df$ww.我试过subset但很慢.

# sample data
data <- data.frame(var1 = log(sample(1:5000)))
ndata <- nrow(data)
maxW <- max(data$var1)

nsample <- 4000
rr <- runif(ndata)
data$ww <- cumsum(exp(data$var1))
new_data <- data[0, ]
i <- 1
while(nrow(new_data) < nsample) {
  new_data[i, ] <- subset(data, data$ww > rr[i] * maxW)[1,]
  i <- i + 1
}
Run Code Online (Sandbox Code Playgroud)

有更快的方法吗?

Gab*_*rdi 17

使用以下prob参数sample():

samp_idx <- sample(seq_len(nrow(data)), nsample, prob=data$ww)
new_data <- data[samp_idx, ]
Run Code Online (Sandbox Code Playgroud)

像这样的东西.运行时间是

# user  system elapsed 
# 0.015   0.000   0.014 
Run Code Online (Sandbox Code Playgroud)

与您的版本:

# user  system elapsed 
# 4.278   0.007   4.290 
Run Code Online (Sandbox Code Playgroud)