问题描述
我正在尝试使用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输入来获取列名,因此它以字符串“ value”的形式出现。我试图无济于事。
#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 package(v0.3.0)于2020-09-23创建
如上所述,以交互方式编写此代码将使用value = sum(value)
。要以编程方式使用字符串来执行此操作,您需要使用"value"
(或上述替代方法)将value
转换为rlang::sym("value")
,然后使用!!
来告诉{{1} }以使用数据列aggregate_key()
而不是文字符号value
。
有关使用dplyr(因此,value
)进行编程的其他一些技巧,可以在这里找到:https://dplyr.tidyverse.org/articles/programming.html