如何在R语言数据框中按10%递增填充指定行的数值
在R数据框中按10%递增填充指定行后的数值
问题说明
你原本使用的fill()函数是tidyr包中用于填充缺失值的工具,无法实现按比例递增的计算逻辑,所以代码无法正常运行。下面提供两种可行的实现方式:
基础R实现
通过循环逐行计算,基于前一行的数值乘以1.1得到当前行的结果:
L3 <- LETTERS[1:3] fac <- sample(L3, 10, replace = T) d <- data.frame(x = 0, y = 1:10, fac = fac) # 设置第5行的起始值 d$x[5] <- 10 # 从第6行到最后一行,按10%递增填充 for(i in 6:nrow(d)){ d$x[i] <- d$x[i-1] * 1.1 }
tidyverse风格实现
如果习惯使用管道式代码,可以结合dplyr和purrr包的函数来完成,代码更简洁:
library(dplyr) library(purrr) L3 <- LETTERS[1:3] fac <- sample(L3, 10, replace = T) d <- data.frame(x = 0, y = 1:10, fac = fac) %>% mutate(x = case_when( y == 5 ~ 10, # 从第5行的起始值开始,生成递增序列并对应到后续行 y > 5 ~ accumulate(x[5:(n()-1)], ~ .x * 1.1)[y - 4], TRUE ~ x ))
内容的提问来源于stack exchange,提问作者Trae
相关产品推荐
相关产品推荐

