具有dplyr、tidyr和ggplot的函数
我如何制作一个函数来获取一列并在dplyr、tidyr和ggplot中使用它具有dplyr、tidyr和ggplot的函数,r,ggplot2,dplyr,tidyr,tidyeval,R,Ggplot2,Dplyr,Tidyr,Tidyeval,我如何制作一个函数来获取一列并在dplyr、tidyr和ggplot中使用它 df <- data.frame(date_col = c(1,1,2,2,3,4,4,5,5), col_a = c('a','b','a','b','a','a','b','a','b'), val_col = runif(9)) dplyr和ggplot调用在下面概述的代码中工作。但是complete调用应该如何编写呢?还是应该使用完成
df <- data.frame(date_col = c(1,1,2,2,3,4,4,5,5),
col_a = c('a','b','a','b','a','a','b','a','b'),
val_col = runif(9))
dplyr和ggplot调用在下面概述的代码中工作。但是complete
调用应该如何编写呢?还是应该使用完成
有没有更规范的方法来做这件事
plot_nice_chart <- function(df, param_col) {
enq_param_col <- enquo(param_col)
str_param_col <- deparse(substitute(param_col))
# aggregate data based on group_by_col,
# explicitly fill in NA's for missing to avoid interpolation
df %>%
group_by(!!enq_param_col, date_col) %>%
summarise(val_col = sum(val_col)) %>%
complete(<what-should-be-here?>, date_col) %>%
ggplot(aes_string("date_col", "val_col", color = str_param_col)) +
geom_line()
}
plot\u nice\u charttidyr的开发版本,tidyr\u 0.6.3.9000,现在使用tidyeval
,因此如果您想更新到该版本,可以使用代码>如您在分组依据中所做的那样
plot_nice_chart <- function(df, param_col) {
enq_param_col <- enquo(param_col)
str_param_col <- deparse(substitute(param_col))
str_param_col
df %>%
group_by(!!enq_param_col, date_col) %>%
summarise(val_col = sum(val_col)) %>%
ungroup() %>%
complete(!!enq_param_col, date_col) %>%
ggplot(aes_string("date_col", "val_col", color = str_param_col)) +
geom_line()
}
您能给出一些示例数据吗?看起来您并没有将任何函数参数传递给complete
,所以看起来事情应该按原样进行。该功能是否不起作用?应该用什么来替换以完成group_by_col和date_col组合中任何缺失的级别谢谢。使用c
将字符串参数包装到向量中是可行的。但是为什么呢?@Rickard我相信cols
参数需要一个字符向量,就像gather\u cols
一样。如果我现在想将这个函数与另一个函数一起使用。我应该如何进行?e、 g.c(“col_a”、“col_b”、“col_c”)%%>%步行(~plot_nice_chart(df,)给我提供了“column
未知”这可能与deparse(替换())有关
或者purrr是如何工作的。试着问一个新问题来解决这个新问题。你可能会发现在tidyeval
@Rickard中工作更容易获得tidyr的开发版本,如果你已经切换到使用字符串作为输入,你将需要使用dplyr的rlang::sym
,但是可以直接使用aes\u stri的字符串ng
和完成
(即,您不需要deparse(substitute())
)。
plot_nice_chart <- function(df, param_col) {
enq_param_col <- enquo(param_col)
str_param_col <- deparse(substitute(param_col))
str_param_col
df %>%
group_by(!!enq_param_col, date_col) %>%
summarise(val_col = sum(val_col)) %>%
ungroup() %>%
complete(!!enq_param_col, date_col) %>%
ggplot(aes_string("date_col", "val_col", color = str_param_col)) +
geom_line()
}
plot_nice_chart <- function(df, param_col) {
enq_param_col <- enquo(param_col)
str_param_col <- deparse(substitute(param_col))
df %>%
group_by(!!enq_param_col, date_col) %>%
summarise(val_col = sum(val_col)) %>%
ungroup() %>%
complete_( c(str_param_col, "date_col") ) %>%
ggplot(aes_string("date_col", "val_col", color = str_param_col)) +
geom_line()
}