我想通过使用函数使我的R脚本更漂亮。
我的R剧本:
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))我想做这样的东西。有人能引导我走正确的道路吗?
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)
}提前谢谢你。
发布于 2018-06-21 04:34:45
您可以使用enquo和quo_name在tidyeval框架中构建您的函数。
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)。
发布于 2018-06-20 17:15:17
这行得通吗?
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)
}是否有特定的理由使用不推荐的函数?
https://stackoverflow.com/questions/50953434
复制相似问题