如何在data frame的嵌套tibble列中应用mutate存储计算结果
实现tibble嵌套列的逐年增长值自动化计算
示例数据集构造
先创建包含必要字段的示例tibble,模拟你的原始数据:
library(tibble) library(dplyr) library(purrr) # 示例数据:id为行标识,T为每行需要计算的年份数 df <- tibble( id = 1:3, generalPotentialRev = c(100, 200, 300), growthRateInc = c(0.05, 0.03, 0.07), T = c(3, 4, 2) )
自动化生成嵌套列的代码
使用pmap逐行处理,根据每行的T值动态生成对应年份的增长值,并封装为嵌套tibble:
df_nested <- df %>% mutate( projected_rev = pmap( list(generalPotentialRev, growthRateInc, T), function(base, rate, years) { # 计算逐年增长值 annual_values <- base * (1 + rate)^(1:years) # 动态设置列名并转为tibble tibble(!!!set_names(annual_values, paste0("Year ", 1:years))) } ) )
代码解释
pmap:按行传递generalPotentialRev、growthRateInc、T三个参数,实现逐行自定义计算annual_values:根据公式generalPotentialRev*(1+growthRateInc)^(1:T)计算每个年份的增长值set_names+!!!:动态生成Year 1、Year 2...格式的列名,将命名向量转为tibble的列结构
查看结果
打印处理后的数据集:
print(df_nested, width = Inf)
输出示例:
# A tibble: 3 × 5 id generalPotentialRev growthRateInc T projected_rev <int> <dbl> <dbl> <dbl> <list> 1 1 100 0.05 3 <tibble [1 × 3]> 2 2 200 0.03 4 <tibble [1 × 4]> 3 3 300 0.07 2 <tibble [1 × 2]>
查看某一行的嵌套列内容:
df_nested$projected_rev[[1]]
输出示例:
# A tibble: 1 × 3 `Year 1` `Year 2` `Year 3` <dbl> <dbl> <dbl> 1 105 110.25 115.7625
固定年份数的简化写法
如果所有行的计算年份数T是固定值(比如统一计算3年),可直接用tibble构造嵌套列,无需pmap:
fixed_years <- 3 df_nested_fixed <- df %>% mutate( projected_rev = tibble( `Year 1` = generalPotentialRev * (1 + growthRateInc)^1, `Year 2` = generalPotentialRev * (1 + growthRateInc)^2, `Year 3` = generalPotentialRev * (1 + growthRateInc)^3 ) )
内容的提问来源于stack exchange,提问作者user113156
相关产品推荐
相关产品推荐

