迭代乘以 R 中一行的值
iteratively multiply the values of a row in R
我正在尝试根据数据框中一行中的观察结果计算一个新的值向量。我想从第一个值开始,将其乘以第二个值,然后将第三个值乘以我刚刚计算的值。我不确定如何引用一个在我计算之前不存在的值。
如果我手写的话,我会这样做:
index1 <- rnorm(12)
index2 <- rnorm(12)
index3 <- rnorm(12)
index4 <- rnorm(12)
index5 <- rnorm(12)
data <- rbind(index1, index2, index3, index4, index5)
splice1=data[2,1]
splice2=splice1*data[2,2]
splice3=splice2*data[2,3]
splice4=splice3*data[2,4]
splice5=splice4*data[2,5]
splices <- c(splice1, splice2, splice3, splice4, splice5)
我需要对 25 行数据执行此操作。
我找到了这个 post
但是当您通过数据集的索引进行引用时,我无法弄清楚如何进行这项工作。
我确信一定有一种简单的方法可以做到这一点,但我不确定从哪里开始。
非常感谢您的帮助。
?apply
对每一行数据的?cumprod
函数:
t(apply(data, 1, cumprod))
# [,1] [,2] [,3] [,4] [,5]
#index1 0.37891415 1.02182094 0.62823228 0.03616281 -0.0262988311
#index2 -0.06586518 -0.03332061 -0.02814185 0.01755643 -0.0238307051
#index3 -0.09113830 0.13385726 -0.11245386 0.10917885 -0.1466176651
#index4 -0.53727635 0.71947970 0.87007225 0.19779160 -0.2119473091
#index5 -0.83982393 -0.08571211 -0.08986865 0.02597184 -0.0006549512
这里的第 2 行看起来很眼熟:
splices
# index2 index2 index2 index2 index2
#-0.06586518 -0.03332061 -0.02814185 0.01755643 -0.02383071
cumprod()
本质上只是乘以每个提供的数字集,一个 cum
ulative prod
uct:
cumprod(1:5)
#[1] 1 2 6 24 120
如果速度有问题,您可以查看 matrixStats
包:
library(matrixStats)
rowCumprods(data)
我正在尝试根据数据框中一行中的观察结果计算一个新的值向量。我想从第一个值开始,将其乘以第二个值,然后将第三个值乘以我刚刚计算的值。我不确定如何引用一个在我计算之前不存在的值。
如果我手写的话,我会这样做:
index1 <- rnorm(12)
index2 <- rnorm(12)
index3 <- rnorm(12)
index4 <- rnorm(12)
index5 <- rnorm(12)
data <- rbind(index1, index2, index3, index4, index5)
splice1=data[2,1]
splice2=splice1*data[2,2]
splice3=splice2*data[2,3]
splice4=splice3*data[2,4]
splice5=splice4*data[2,5]
splices <- c(splice1, splice2, splice3, splice4, splice5)
我需要对 25 行数据执行此操作。
我找到了这个 post
我确信一定有一种简单的方法可以做到这一点,但我不确定从哪里开始。
非常感谢您的帮助。
?apply
对每一行数据的?cumprod
函数:
t(apply(data, 1, cumprod))
# [,1] [,2] [,3] [,4] [,5]
#index1 0.37891415 1.02182094 0.62823228 0.03616281 -0.0262988311
#index2 -0.06586518 -0.03332061 -0.02814185 0.01755643 -0.0238307051
#index3 -0.09113830 0.13385726 -0.11245386 0.10917885 -0.1466176651
#index4 -0.53727635 0.71947970 0.87007225 0.19779160 -0.2119473091
#index5 -0.83982393 -0.08571211 -0.08986865 0.02597184 -0.0006549512
这里的第 2 行看起来很眼熟:
splices
# index2 index2 index2 index2 index2
#-0.06586518 -0.03332061 -0.02814185 0.01755643 -0.02383071
cumprod()
本质上只是乘以每个提供的数字集,一个 cum
ulative prod
uct:
cumprod(1:5)
#[1] 1 2 6 24 120
如果速度有问题,您可以查看 matrixStats
包:
library(matrixStats)
rowCumprods(data)