繁体   English   中英

R中的加权采样

[英]Weighted sampling in R

我有一个数据帧data 在每一行i都分配了一个data$ww的权重。 现在我想制作一个示例new_data data ,加权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
}

有更快的方法吗?

使用sample()prob参数:

samp_idx <- sample(seq_len(nrow(data)), nsample, prob=data$ww)
new_data <- data[samp_idx, ]

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

# user  system elapsed 
# 0.015   0.000   0.014 

与您的版本:

# user  system elapsed 
# 4.278   0.007   4.290 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM