r - 我如何取消引用 fable::aggregate_key 的字符列名?
问题描述
我正在尝试使用包中的aggregate_key
函数在fable
闪亮的 flexdashboard 中创建分层时间序列。只要我可以在列名“值”中硬编码,下面的代码就可以正常工作。
library(tidyverse)
library(tsibble)
library(fable)
library(fpp2)
agg_key <- cbind.data.frame(visnights, year=1900:1975) %>%
pivot_longer(NSWMetro:OTHNoMet, names_to=c("State", "Region"), names_sep=c(3)) %>%
as_tsibble(index=year, key=c(State, Region)) %>%
aggregate_key(State / Region, value=sum(value))
出现问题是因为我使用 flexdashboard 输入来获取列名,因此它以字符串“值”的形式出现。我试图跟随无济于事。
#only repeating the last line in the pipe for brevity
aggregate_key(State / Region, value=sum(!!"value"))
aggregate_key(State / Region, value=sum(!!!"value"))
aggregate_key(State / Region, value=sum(as.name("value")))
aggregate_key(State / Region, value=sum(as_label("value")))
请帮我弄清楚如何将字符串传递给这个函数。
解决方案
该aggregate_key()
函数具有summarise()
语义,因此任何适用于非标准评估 (NSE) 并且summarise()
也应该在这里工作的东西。
要将字符串转换为符号(列的名称),您可以使用as.name("value")
、as.symbol("value")
或rlang::sym("value")
. 您上面的尝试非常接近,并且您拥有使其工作的所有必要成分。
一个可行的解决方案是使用value = sum(!!as.name("value"))
:
library(tidyverse)
library(tsibble)
library(fable)
library(fpp2)
cbind.data.frame(visnights, year=1900:1975) %>%
pivot_longer(NSWMetro:OTHNoMet, names_to=c("State", "Region"), names_sep=c(3)) %>%
as_tsibble(index=year, key=c(State, Region)) %>%
aggregate_key(State / Region, value=sum(!!as.name("value")))
#> # A tsibble: 2,052 x 4 [1Y]
#> # Key: State, Region [27]
#> year State Region value
#> <int> <chr> <chr> <dbl>
#> 1 1900 <aggregated> <aggregated> 83.4
#> 2 1901 <aggregated> <aggregated> 64.6
#> 3 1902 <aggregated> <aggregated> 71.3
#> 4 1903 <aggregated> <aggregated> 70.0
#> 5 1904 <aggregated> <aggregated> 86.4
#> 6 1905 <aggregated> <aggregated> 66.4
#> 7 1906 <aggregated> <aggregated> 71.4
#> 8 1907 <aggregated> <aggregated> 67.4
#> 9 1908 <aggregated> <aggregated> 84.6
#> 10 1909 <aggregated> <aggregated> 64.0
#> # … with 2,042 more rows
由reprex 包(v0.3.0)于 2020 年 9 月 23 日创建
正如您上面提到的,以交互方式编写此代码,您将使用value = sum(value)
. 要以编程方式对字符串执行此操作,您需要转换"value"
为value
using rlang::sym("value")
(或上面的替代方法),然后!!
用于告诉aggregate_key()
使用数据列value
而不是文字符号value
。
aggregate_key()
可以在此处找到有关使用 dplyr(以及因此)编程的一些进一步提示: https ://dplyr.tidyverse.org/articles/programming.html
推荐阅读
- keras - 提供 POS 标签作为 RNN 的输入以及词嵌入
- delphi - 如何使用 tFDMemTable 将多个数据表保存到一个文件中
- regex - 棘轮会影响嵌套结构和“节俭的限定词”吗?
- excel - 我的编码存在溢出错误
- groovy - 如何在unetstack中发送和接收基带信号?
- node.js - 我在我的 NestJS 应用程序(使用 authGuard)中使用了 passport-jwt 身份验证策略,如何访问我的控制器中的令牌有效负载?
- magento-1.9 - 无法登录从 1.9.3 升级到 1.9.4.1 的新创建的客户
- java - 如何从关闭挂钩中以非零退出代码退出?
- android - 模拟器上的片段显示错误
- python - 获取列名列表的数据框