r - 应用pivot_wider后如何将YAML标头中设置的字符值参数读取为列名?
问题描述
我正在尝试开发一个 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)
推荐阅读
- reactjs - 确保我们没有过度连接的组件
- php - 在其他 php 文件中执行函数
- string - 是否有更有效的方法来搜索数据框的列?
- reactjs - 将日期和时间从一个组件解析到另一个组件
- sql-server - 使用通配符仅选择字符串的一部分(SQL Server)
- excel - 使用选项卡名称更改某些选项卡上的数据以在另一个选项卡中更改
- svg - 如何在保留 midXmidY 位置的同时缩放 SVG 线
- python - 如何为网站上的下拉选项列表选择或传递值到隐藏类型?
- symfony - 如何在 Symfony4 中显示 404 错误页面而不是错误
- c++ - 如何检查链接列表是否已满/计算机在附加功能内是否内存不足