【发布时间】:2021-07-12 12:17:50
【问题描述】:
我正在尝试编写一个我经常在我的论文中使用但很难让它运行的函数。
我认为,代码可以运行,但是一旦我运行该函数就会失败,因为 R 如何通过包含函数选项读取指定的变量。这是一个变量 prburden 和 link to sample data 的成功代码:
rburden_data2 %>%
# select only percent rent burden vars
select(tractid, year, CBSA_name, contains("prburden")) %>%
# group by tractid and count # of tracts by group
group_by(tractid) %>%
# create rent burden change indicator - continuous
mutate(cont_chg_prburden = prburden[year == "2019"] - prburden[year == "2000"] ) %>%
# create rent burden change indicator - categorical
mutate(cat_chg_prburden = case_when(cont_chg_prburden < 0 ~ "negative",
cont_chg_prburden == 0 ~ "zero",
cont_chg_prburden > 0 ~ "positive" ,
TRUE ~ "NA")) %>%
# create rent burden change indicator - binary
mutate(bi_chg_prburden = case_when(cat_chg_prburden == "negative" ~ "loss",
cat_chg_prburden == "positive" ~ "gain",
TRUE ~ "NA")) %>%
glimpse()
在这个命令中我:
- 获取我的数据集 (rburden_data2)
- 仅包含重要变量的子集
- 按人口普查区 (tractid) 分组
- 创建第一年和去年租金负担之间差异的连续指标
- 创建负、零和正变化的分类指标
- 创建研究期间收益或损失的二进制指标
这是我尝试运行的函数,我指定了相同的变量 prburden:
# function ++++++++++++++++++++
change_indicators <- function(data, var){
data %>%
# select only percent rent burden vars
select(tractid, year, contains("prburden")) %>%
# group by tractid and count # of tracts by group
group_by(tractid) %>%
# create rent burden change indicator - continuous
mutate("cont_chg_{{ var }} ":= "{{var}}"[year == 2019] - "{{var}}"[year == 2000]) %>%
# create rent burden change indicator - categorical
mutate("cat_chg_{{ var }}" := case_when("cont_chg_{{ var }}" < 0 ~ "negative",
"cont_chg_{{ var }}" == 0 ~ "zero",
"cont_chg_{{ var }}" > 0 ~ "positive" ,
TRUE ~ "NA")) %>%
# create rent burden change indicator - binary
mutate("bi_chg_{{ var }}" := case_when("cat_chg_{{ var }}" == "negative" ~ "loss",
"cat_chg_{{ var }}" == "positive" ~ "gain",
TRUE ~ "NA")) %>%
glimpse()
}
# test ++++++++++++++++++++
test <- change_indicators(data = rburden_data2,
var = prburden)
# error ++++++++++++++++++++
Error: Problem with `mutate()` column `cont_chg_prburden `.
ℹ `cont_chg_prburden = "{{var}}"[year == 2019] - "{{var}}"[year == 2000]`.
x non-numeric argument to binary operator
ℹ The error occurred in group 1: tractid = "01001020100".
我遇到的问题是,当我通过所有名称更改传递变量“prburden”,然后调用它来计算年份差异时。我对如何使用 {{}} 运算符很困惑,因为我认为在第一个 := 之后我不需要“”,但它会引发错误。
任何将我的第一个代码块转换为可执行函数的帮助将不胜感激。谢谢!
【问题讨论】:
-
谢谢,@RonakShah。我已经包含了一个示例数据集并对问题进行了一些重新格式化。
标签: r operators tidyverse dplyr