gpt4 book ai didi

r - 将每三行数据框相加,然后将新结果相乘 - R

转载 作者:行者123 更新时间:2023-12-01 16:42:50 25 4
gpt4 key购买 nike

我有一个数据框,我想每三行添加一次。然后,将 cumprod 应用于行,以便获得一个包含生成的新行的新 data.frame。

最后我将只有行数的三分之一。

下面你可以找到我编写的一些代码。我尝试寻找对象的类并复制适用于向量而不是矩阵的代码。

    XYZ<-read.xlsx2("XYZ.xlsx",1)
XYZ.CUT<-aggregate(XYZ~gl(nrow(XYZ)/3, 3), data.frame(XYZ), sum)
F.XYZ<-apply(t(XYZ.CUT+1),1,cumprod)

这就是我所拥有的:

 X       Y      Z 
-0,01% 0,32% 0,11%
-0,04% 0,01% 0,45%
-0,11% -0,06% 0,03%
0,03% -0,04% 0,45%
0,02% 0,04% 0,30%
-0,07% -0,11% 0,11%
-0,12% -0,13% 0,30%
-0,01% -0,07% 0,04%
-0,37% 0,08% 0,05%

首先我想要:

 X       Y      Z
-0,16% 0,25% 0,59%
-0,02% -0,11% 0,86%
-0,50% -0,12% 0,39%

给每个元素加 1 后:

 X           Y           Z
(1-0,16%) (1+0,25%) (1+0,59%)
(1-0,02%) (1-0,11%) (1+0,86%)
(1-0,50%) (1-0,12%) (1+0,39%)

我想用行制作一个 cumprod:

X           Y           Z
x1 y1 z1
x1*x2 y1*y2 z1*z2
x1*x2*x3 y1*y2*y3 z1*z2*z3

提前致以问候。

最佳答案

我们可以使用tidyverse。使用 readr 中的 parse_number,从列 (mutate_all) 中提取数字部分,并按使用 gl 创建的索引进行分组>, 汇总所有列以获得总和

library(tidyverse)
library(readr)
out <- XYZ %>%
mutate_all(parse_number) %>%
group_by(grp = as.integer(gl(n(), 3, n()))) %>%
summarise_all(sum)

然后,我们使用 matrixStats 中的 rowCumprods 来获取每行的累积乘积

library(matrixStats)
rowCumprods(as.matrix(out[-1]) + 1)
# [,1] [,2] [,3]
#[1,] 0.84 1.0668 1.696212
#[2,] 0.98 0.8722 1.622292
#[3,] 0.50 0.4400 0.611600

数据

XYZ <- structure(list(X = c("-0.01%", "-0.04%", "-0.11%", "0.03%", "0.02%", 
"-0.07%", "-0.12%", "-0.01%", "-0.37%"), Y = c("0.32%", "0.01%",
"-0.06%", "-0.04%", "0.04%", "-0.11%", "-0.13%", "-0.07%", "0.08%"
), Z = c("0.11%", "0.45%", "0.03%", "0.45%", "0.30%", "0.11%",
"0.30%", "0.04%", "0.05%")), row.names = c(NA, -9L), class = "data.frame")

关于r - 将每三行数据框相加,然后将新结果相乘 - R,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56553883/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com