我有一个数据框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
}
有更快的方法吗?
答案 0 :(得分:17)
使用prob
的{{1}}参数:
sample()
像这样的东西。运行时间是
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