在R

时间:2018-08-03 11:34:30

标签: r loops resampling

请考虑以下数据:

library(Benchmarking)
d <- data.frame(x1=c(200,200,3000), x2=c(200,200,1000), y=c(100,100,3))

所以我有3个观察结果。

现在,我想从2中随机选择d个观察值3次(无重复-总共有3种组合)。对于这三个时间,我想计算以下内容:

e <- dea(d[c('x1', 'x2')], d$y)
weighted.mean(eff(e), d$y)

也就是说,我将得到三个数字,我想计算它们的平均值。有人可以通过 R 中的循环功能演示如何做到这一点吗?

示例:

总共有三种组合,所以在这种情况下我只能得到相同的结果。如果手动进行计算,将得到以下三个结果:

0.977  0.977  1

(结果当然可以是另一个顺序)。

这两个数字的平均值是:

0.984

这是一个简单的示例。就我而言,我有很多组合,但我并没有选择所有组合(例如,可能有1,000,000个组合,而我只选择了1000个组合)。

2 个答案:

答案 0 :(得分:1)

我认为最好使用sample.intreplicate而不是进行所有组合,请参见我的示例:

nsample <- 2 # Number of selected observations
nboot <- 10  # Number of times you repeat the process

replicate(nboot, with(d[sample.int(nrow(d), nsample), ], 
                      weighted.mean(eff(dea(data.frame(x1, x2), y)), y)))

答案 1 :(得分:0)

我也检查了您带来的有关此问题的链接,因此,如果我做对了,我的意思是,您希望每次提取两行(观察值)而不进行替换,则可以使用示例:

SelObs <- sample(1:nrow(d),2)
# for getting the selected observations just
dSel <- d[SelObs,]

然后进行计算

如果不希望在nex随机选择中选择那些已选择的观测值,则类似,但是需要索引

Obs <- 1:nrow(d)
SelObs <- sample(Obs, 2)
dSel <- d[SelObs, ]
# and now, for removing those already selected 
Obs <- Obs[-SelObs]
# and keep going with next random selections and the above code