You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用dplyr基于年份命名的列创建百分比变化新列?

解决方法

你的代码问题出在mutate步骤里:直接写year/(year-1)-1是在计算数值变量year的数学运算(也就是2022/2021-1),而不是引用数据框中名为2022和2021的列。需要用dplyr的非标准求值语法来动态引用列名,以下是两种可行的修正方案:

方案1:使用.data代词(推荐,更直观)

.data可以通过字符串形式的列名直接引用数据框中的列:

year = 2022

data1 %>%
  select(sprintf("%d", seq(from = year - 4, to = year, by = 1))) %>%
  mutate(percent = .data[[as.character(year)]] / .data[[as.character(year - 1)]] - 1)

方案2:使用sym()和!!操作符

先将年份转换为符号对象,再通过!!(bang-bang)操作符在mutate中求值:

year = 2022

# 将年份转为列名符号
current_year_col <- sym(as.character(year))
prev_year_col <- sym(as.character(year - 1))

data1 %>%
  select(sprintf("%d", seq(from = year - 4, to = year, by = 1))) %>%
  mutate(percent = !!current_year_col / !!prev_year_col - 1)

两种方案都能正确取到数据框中对应年份列的值,计算出2021到2022的百分比变化。

内容的提问来源于stack exchange,提问作者user11849

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 02:45:33