如何在应用 pivot_wider 后读取 YAML header 中设置的 character-valued 参数作为列名?

How to read character-valued parameters set in YAML header as column names after applying pivot_wider?

我正在尝试开发一个 R-markdown 报告,我可以在其中将参数设置为当前和之前的季度,如示例中所示。报告的一部分涉及将这些字符串转换为列名,然后计算百分比变化。但是,mutate() 调用正在将 params$ 评估为我设置给它们的字符串值,而不是它们已旋转到的列名称。是否有技巧可以使 mutate() 将参数值评估为列名,或者将参数设置为不同的值以使代码按编写的方式工作?

---
title: "my_notebook"
output: html_notebook
params:
  this_qtr: "2020Q2"
  last_qtr: "2020Q1"
---

library(dplyr)
library(magrittr)
library(tidyr)

data <- tibble::tibble(quarter = c(rep(params$this_qtr, 4), rep(params$last_qtr, 4)),
                       amount = rnorm(8),
                       state = rep(c("pa", "nj", "md", "de"), 2))

data_wide <- data %>% pivot_wider(names_from = quarter, values_from = amount)

# throws an error because params$ are character strings rather than column names
data_pct_ch <- data_wide %>% mutate(pct_ch = params$this_qtr/params$last_qtr - 1)

您需要将 params 值的字符串版本转换为符号。您可以使用 rlang::sym 来做到这一点,然后使用 !! 将其注入到 mutate 中。尝试

data_pct_ch <- data_wide %>% 
  mutate(pct_ch = !!rlang::sym(params$this_qtr)/!!rlang::sym(params$last_qtr) - 1)

或者您可以使用带有 .data 代词的字符索引

data_pct_ch <- data_wide %>% 
  mutate(pct_ch = .data[[params$this_qtr]]/.data[[params$last_qtr]] - 1)