我有一个dataframe,df,看起来是这样的:

Year Colombia    Chile
------------------------
2006   9.5660    24.5576
2007  26.0079    10.9652
2008  16.0893    2.3721
2009  -5.1036   -5.0465

我想加上两列index_Colombiaindex_Chile,第一行f(1)的值是index_Colombia,第二行Colombia的值是index_Colombia*(1+26.0079/index_Colombia),智利的值是index_Colombia*(1+10.9652/index_Colombia),依此类推...这样我们就得到了下面的df

Year Colombia    Chile    index_Colombia   index_Chile 
-------------------------------------------------------
2006   9.5660    24.5576      100            100       
2007  26.0079    10.9652   126.0079         110.9652
2008  16.0893    2.3721     146.2816         113.5974
2009  -5.1036   -5.0465     138.8159        107.864

我突然想到,这是有必要的mutate函数,但我不知道如何制定它....你能帮助我吗?

推荐答案

一个可能的解决方案:

library(dplyr)

df <- data.frame(
  Year = c(2006L, 2007L, 2008L, 2009L),
  Colombia = c(9.566, 26.0079, 16.0893, -5.1036),
  Chile = c(24.5576, 10.9652, 2.3721, -5.0465)
)

bind_rows(df[1,],
 df %>% slice(-1) %>% 
 mutate(across(-Year, ~ 100 * cumprod(1 + .x/100), .names = "index_{.col}"))) %>% 
 replace(is.na(.), 100)

#>   Year Colombia   Chile index_Colombia index_Chile
#> 1 2006   9.5660 24.5576       100.0000    100.0000
#> 2 2007  26.0079 10.9652       126.0079    110.9652
#> 3 2008  16.0893  2.3721       146.2817    113.5974
#> 4 2009  -5.1036 -5.0465       138.8161    107.8647

R相关问答推荐

高质量地将R格式的图表从Word中输出

更新合适的R mgcv::bam模型报告无效类型(关闭).'';错误

如何使用`ggplot2::geom_segment()`或`ggspatial::geom_spatial_segment()`来处理不在格林威治中心的sf对象?

如何修复R码的置换部分?

多重RHS固定估计

如果第一个列表中的元素等于第二个列表的元素,则替换为第三个列表的元素

如何根据嵌套元素的名称高效而优雅地确定它属于哪个列表?

条形图和在Ploly中悬停的问题

多个过滤器内的一个盒子在仪表板Quarto

使用带有OR条件的grepl过滤字符串

在GG图中绘制射线的自动程序

汇总数据的Sheffe检验的P值(平均值和标准差)

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

远离理论值的伽马密度曲线下面积的近似

如何删除R中除数字元素以外的所有元素

在ggplot2上从多个数据框创建复杂的自定义图形

如何判断代码是否在R Markdown(RMD)上下文中交互运行?

隐藏基于 case 总数的值

按顺序将地块添加到列表

残差与拟合图上标记点的故障排除