Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有dplyr、tidyr和ggplot的函数_R_Ggplot2_Dplyr_Tidyr_Tidyeval - Fatal编程技术网

具有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调用应该如何编写呢?还是应该使用完成

我如何制作一个函数来获取一列并在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
调用应该如何编写呢?还是应该使用
完成

有没有更规范的方法来做这件事

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()
}