我有这样的数据:

library(dplyr)


set.seed(123)  
data <- data.frame(
  date = rep(1:3, each=3),
  grupo = rep(c("A", "B", "C"), 3),
  x = runif(9, 10, 50),
  y = runif(9, 20, 100),
  z = runif(9, 5, 30)
)

# Convertir group into factor
data$grupo <- as.factor(data$grupo)

# Order data 
data <- data %>% arrange(grupo, date)

我希望每一行的第一个观察值为(1+original_value/100).然而,从第二行开始,我希望将公式修改为first_moded_Value*(1 + second_observed_Value/100),第三个新行将执行:second_moded_Value*(1 + third_observed_Value/100).

我生成了以下公式,但我无法声明lag()应该采用修改后的值,而不是lag(原始值):

# Apply formula in each group for variables, x,y,z
dataaa <- data %>% 
  group_by(grupo) %>% 
  mutate(across(c(x, y, z), ~if_else(row_number() == 1, (1 + ./100), lag(.)*(1 + ./100))))

有什么帮助吗?

推荐答案

cumprod()函数似乎就是这里的答案,因为您将每个值乘以之前的结果:

dataaa <- data %>%
  group_by(grupo) %>%
  mutate(across(c(x, y, z), ~cumprod(1 + . / 100)))

dataaa
# A tibble: 9 × 5
# Groups:   grupo [3]
   date grupo     x     y     z
  <int> <fct> <dbl> <dbl> <dbl>
1     1 A      1.22  1.57  1.13
2     2 A      1.77  2.73  1.38
3     3 A      2.32  5.24  1.68
4     1 B      1.42  1.97  1.29
5     2 B      2.09  3.26  1.56
6     3 B      3.04  4.55  1.91
7     1 C      1.26  1.56  1.27
8     2 C      1.41  2.00  1.65
9     3 C      1.87  2.47  1.96

R相关问答推荐

从有序数据中随机抽样

如何在ggplot 2线性图的每个方面显示每个组的误差条?

R创建一个数据透视表,计算多个组的百分比

在发布到PowerBI Service时,是否可以使用R脚本作为PowerBI的数据源?

任意列的欧几里得距离

ggplot2中的X轴显示数值,单位为百,而不是十

R for循环返回到先前值

如何在格子中添加双曲曲线

在for循环中转换rabrame

R中插入符号训练函数的中心因子和尺度因子预测

如何从像glm这样的模型中提取系数表的相关性?

如何在科学记数法中显示因子

从非重叠(非滚动)周期中的最新数据向后开窗并在周期内计数

QY数据的处理:如何定义QY因素的水平

仅在R中的数据集开始和结束时删除所有 Select 列的具有NA的行

如果COLSUM为>;0,则COLNAME为向量

提高圣彼得堡模拟的速度

如何在Quarto中使用美人鱼图表中的标记来加粗文本

列间序列生成器的功能

创建两个变量组合的索引矩阵