[英]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.