首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带dplyr和lazyeval的R中的函数

带dplyr和lazyeval的R中的函数
EN

Stack Overflow用户
提问于 2018-06-20 16:58:11
回答 2查看 188关注 0票数 1

我想通过使用函数使我的R脚本更漂亮。

我的R剧本:

代码语言:javascript
复制
 library(tidyverse) #contains dplyr
Data <- data.frame(date = rep(as.Date(c('2018-06-18', '2018-06-19', '2018-06-20')), 4),
                   quantity = rep(c(1, 2, 3), each = 4),
                   article =  rep(c('insurance', 'pizza'), 6))

        D <- Data %>%

    select(date, quantity, article) %>%
    filter(str_detect(article,"pizza")) %>%
    group_by_(date) %>%
    summarise(quantity=sum(quantity))

我想做这样的东西。有人能引导我走正确的道路吗?

代码语言:javascript
复制
    library(tidyverse) 
    library(lazyeval)

    f <- function(name){
    D <- Data %>%
    select_(~date, ~quantity, ~article) %>%
    filter_(~str_detect(~article,"name")) %>%
    group_by_(~date) %>%
    summarise_(quantity=~sum(quantity))
    return(D) 
    }

提前谢谢你。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-21 04:34:45

您可以使用enquoquo_name在tidyeval框架中构建您的函数。

代码语言:javascript
复制
library(tidyverse)

Data <- data.frame(date = rep(as.Date(c('2018-06-18', '2018-06-19', '2018-06-20')), 4),
                   quantity = rep(c(1, 2, 3), each = 4),
                   article =  rep(c('insurance', 'pizza'), 6)) 

daily_sales1 <- function(df, product){

  output <- df %>%
    select(date, quantity, article) %>%
    filter(str_detect(article, product)) %>%
    group_by(date) %>%
    summarise(quantity = sum(quantity, na.rm = TRUE))

  return(output)
}

daily_sales1(Data, 'pizza')
#> # A tibble: 3 x 2
#>   date       quantity
#>   <date>        <dbl>
#> 1 2018-06-18        4
#> 2 2018-06-19        3
#> 3 2018-06-20        5

daily_sales2 <- function(df, product){

  product <- enquo(product)

  output <- df %>%
    select(date, quantity, article) %>%
    filter(str_detect(article, !! quo_name(product))) %>%
    group_by(date) %>%
    summarise(quantity = sum(quantity, na.rm = TRUE))

  return(output)
}

daily_sales2(Data, pizza)
#> # A tibble: 3 x 2
#>   date       quantity
#>   <date>        <dbl>
#> 1 2018-06-18        4
#> 2 2018-06-19        3
#> 3 2018-06-20        5

reprex封装创建于2018-06-20 (v0.2.0)。

票数 0
EN

Stack Overflow用户

发布于 2018-06-20 17:15:17

这行得通吗?

代码语言:javascript
复制
Data <- data.frame(date = rep(as.Date(c('2018-06-18', '2018-06-19', '2018-06-20')), 4),
                   quantity = rep(c(1, 2, 3), each = 4),
                   article =  rep(c('insurance', 'pizza'), 6)) 

f <- function(name){
  D <- Data %>%
    select(date, quantity, article) %>%
    filter(str_detect(article, name)) %>%
    group_by(date) %>%
    summarize(quantity = sum(quantity))

  return(D)
}

是否有特定的理由使用不推荐的函数?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50953434

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档