请考虑以下数据:
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个组合)。
答案 0 :(得分:1)
我认为最好使用sample.int
和replicate
而不是进行所有组合,请参见我的示例:
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