考虑以下数据:
x <- c(2, 4, 6, 8)
mean(x)
[1] 5
现在我想绘制2
观察。这给了我6
个组合。我想计算所有6
组合的平均值,以及这些6
值的平均值。也就是说,我应该得到以下方法:
(2+4)/2 = 3
(2+6)/2 = 4
(2+8)/2 = 5
(4+6)/2 = 5
(4+8)/2 = 6
(6+8)/2 = 7
我知道订单可能与上述不同,但每次都应该给我一个平均5
(在上面的情况下:(3+4+5+5+6+7)/6 = 5
)。
任何人都可以帮助我吗?
答案 0 :(得分:0)
One Line回答:
mean(rowMeans(t(combn(x,2))))
逐步解释:
用&#39;绘制2个观察值&#39;你实际上是指从x:
中选择2个对象/观察x <- c(2, 4, 6, 8)
combn(x, 2)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 2 2 2 4 4 6
## [2,] 4 6 8 6 8 8
使用t()
您可以将其转换为:
t(combn(x,2))
## [,1] [,2]
## [1,] 2 4
## [2,] 2 6
## [3,] 2 8
## [4,] 4 6
## [5,] 4 8
## [6,] 6 8
您可以按rowMeans()
rowMeans(t(combn(x,2)))
## [1] 3 4 5 5 6 7
如果你计算出它的平均值,你得到了你想要的东西。
mean(rowMeans(t(combn(x,2))))
## [1] 5
答案 1 :(得分:0)
我认为OP正朝着正确的方向使用sample
来绘制2
次观察n
次(如标题所示)。但不知何故,解决方案的角度朝着combn
函数变化(这不是一个正确的选项)。
选项是将sample
与replicate
一起使用:
x <- c(2, 4, 6, 8)
mean(replicate(6, sample(x,2)))
#[1] 4.666667 #There is random-ness in set of observations selected.
在上述尝试中,replicate
提供了6
组2个观察结果:
replicate(6, sample(x,2))
# [,1] [,2] [,3] [,4] [,5] [,6]
# [1,] 2 4 4 4 8 8
# [2,] 6 2 2 8 6 2
就我个人而言,我认为combn
在这里使用是正确的选择。 combn
返回所选观察次数的所有可能组合。这意味着,每个观察(x
)在从combn
函数接收的组合集中出现的次数相同。这意味着,mean
的{{1}}将与combn(x,2)
相同。因此,在这种情况下使用mean(x)
有什么意义。