【发布时间】:2018-09-04 16:41:30
【问题描述】:
假设我在 R 中有一个名为 df 的 tibble 数据框,如下所示:
df <- tibble(a = 1:3,
b = c("a", "b", "c"))
使用dplyr::rename() 重命名变量(或使用dplyr::mutate() 创建新变量)相当容易,包括使用:= 运算符取消引用,例如:
df <- df %>%
rename("the new b" := b) %>%
mutate(c = a + 1)
这给了我:
> df
# A tibble: 3 x 3
a `the new b` c
<int> <chr> <dbl>
1 1 a 2
2 2 b 3
3 3 c 4
但是,当我想用expression() 在变量名中包含数学符号或方程式时,它不起作用,例如当我尝试使用希腊字母符号时,它失败了:
# Fails:
> df <- df %>%
+ mutate(expression(A~symbol:~alpha) = c)
Error: unexpected '=' in:
"df <- df %>%
mutate(expression(A~symbol:~alpha) ="
# Fails again:
> df <- df %>%
+ mutate(expression(A~symbol:~alpha) := c)
Error: The LHS of `:=` must be a string or a symbol
编辑/更新:为了清楚起见,在上面的示例中,我想获取实际的希腊字母符号(不是字母字符串“alpha”)。
进一步编辑:这是一个复杂的例子。如果我想要这样的东西作为变量名:
复杂示例的可能用例是facet 标签,当使用ggplot2::facet_wrap() 绘图或使用rmarkdown 将数据框呈现为表格时,等等......
我尝试将expression() 嵌套在paste() 或str_c() 中,但无济于事。我如何实现这一目标?谢谢。
【问题讨论】:
-
嗯,这是一个复杂的名字。但是,您不认为通过将其称为列名来从该列中提取值有点太难
-
如果 unicode 值可用,您可以使用
paste创建表达式 -
即
df %>% mutate(!! paste0("f(x) = ", "\u03B1", "/", "\u03C1") := c)我暂时没有符号码 -
类似
df %>% mutate(!! paste0("f(x) = ", "\u03A3", "xi/i") := c) -
是的。我认为这对于我的大多数用例来说肯定已经足够好了。谢谢你的建议!标记为已解决。
标签: r parsing variables expression naming