R.计算行中的值与其他列的值置换n次的乘积
R. Compute product of value in row by permutated value of other column n times
我有一个这样的数据框(1000000 行):
A B C
a 0.2 4
b 0.8 7
c 1 8
d 0.2 1
e 0.6 9
我想将 B 中的每个值乘以从 C 中获取的随机数(无替换排列),为每一行生成一个新值 x。然后我想对所有 x 值求和以获得新行 y。重复此 n 次。我的数据框中不需要 xn 列,只需要一个带有 yn 值的向量。
我会得到这样的结果(2 次迭代):
A B C x1 x2 .... xn
a 0.2 4 0.2*1=0.2 0.2*4=0.8
b 0.8 7 0.8*8=6.4 0.8*9=0.72
c 1 8 1*7=7 1*1=1
d 0.2 1 0.2*9=1.8 0.2*7=1.4
e 0.6 9 0.6*4=2.4 0.6*8=4.8
y 17.8 8.72 .... yn
使用 replicate
在这里有帮助:
n <- 10
(y <- with(df, replicate(sum(B * sample(C)), n = n)))
# [1] 16.4 16.4 18.0 17.8 14.2 14.2 18.0 20.4 15.2 19.8
如果有放回抽样是一种选择,则可以通过生成 C
值的单个大型矩阵然后使用 colSums
.
来加快速度
我有一个这样的数据框(1000000 行):
A B C
a 0.2 4
b 0.8 7
c 1 8
d 0.2 1
e 0.6 9
我想将 B 中的每个值乘以从 C 中获取的随机数(无替换排列),为每一行生成一个新值 x。然后我想对所有 x 值求和以获得新行 y。重复此 n 次。我的数据框中不需要 xn 列,只需要一个带有 yn 值的向量。
我会得到这样的结果(2 次迭代):
A B C x1 x2 .... xn
a 0.2 4 0.2*1=0.2 0.2*4=0.8
b 0.8 7 0.8*8=6.4 0.8*9=0.72
c 1 8 1*7=7 1*1=1
d 0.2 1 0.2*9=1.8 0.2*7=1.4
e 0.6 9 0.6*4=2.4 0.6*8=4.8
y 17.8 8.72 .... yn
使用 replicate
在这里有帮助:
n <- 10
(y <- with(df, replicate(sum(B * sample(C)), n = n)))
# [1] 16.4 16.4 18.0 17.8 14.2 14.2 18.0 20.4 15.2 19.8
如果有放回抽样是一种选择,则可以通过生成 C
值的单个大型矩阵然后使用 colSums
.