在dplyr中输入点,不带平铺或引号

在dplyr中输入点,不带平铺或引号,r,dplyr,R,Dplyr,如何让以下代码在没有引号或平铺的情况下运行 这对我来说很重要,因为我在一个自定义函数中使用这个独立的代码,在这个函数中引入引号或平铺会使事情复杂化 谢谢 dataframe% dplyr::汇总(计数=n())%>% dplyr::mutate(perc=(计数/总和(计数))*100)%>% dplyr::排列(描述(perc)) #>#tibble:4 x 4 #>#群体:性别[2] #>性别宠物计数perc #> #>1只母猫3 75.0 #>2只公狗2 66.7 #>3雄

如何让以下代码在没有引号或平铺的情况下运行

这对我来说很重要,因为我在一个自定义函数中使用这个独立的代码,在这个函数中引入引号或平铺会使事情复杂化

谢谢

dataframe%
dplyr::汇总(计数=n())%>%
dplyr::mutate(perc=(计数/总和(计数))*100)%>%
dplyr::排列(描述(perc))
#>#tibble:4 x 4
#>#群体:性别[2]
#>性别宠物计数perc
#>        
#>1只母猫3 75.0
#>2只公狗2 66.7
#>3雄性1类33.3
#>4只母狗125.0
##引用
dplyr::分组方式(数据帧,.dots=c('gender','pet'))%>%
dplyr::汇总(计数=n())%>%
dplyr::mutate(perc=(计数/总和(计数))*100)%>%
dplyr::排列(描述(perc))
#>#tibble:4 x 4
#>#群体:性别[2]
#>性别宠物计数perc
#>        
#>1只母猫3 75.0
#>2只公狗2 66.7
#>3雄性1类33.3
#>4只母狗125.0
##无瓷砖
dplyr::分组方式(数据帧,.dots=c(性别,宠物))%>%
dplyr::汇总(计数=n())%>%
dplyr::mutate(perc=(计数/总和(计数))*100)%>%
dplyr::排列(描述(perc))
#>compat_lazy_dots(.dots,caller_env(),…)中出错:找不到对象“gender”

如果我们需要在函数中使用它,则将这些组作为一个quosure传递,并使用
进行计算

f1 <- function(dat, groups) {
 dat %>%
    group_by(!!! groups) %>%
    summarize(counts = n()) %>%
    mutate(perc = (counts / sum(counts)) * 100) %>% 
    arrange(desc(perc))
 }

f1(dataframe, quos(gender, pet))
# A tibble: 4 x 4
# Groups: gender [2]
#  gender pet    counts  perc
#  <fctr> <fctr>  <int> <dbl>
#1 female cat         3  75.0
#2 male   dog         2  66.7
#3 male   cat         1  33.3
#4 female dog         1  25.0

改为使用
group_by

dplyr::group_by(dataframe, gender, pet) %>%
  dplyr::summarize(counts = n()) %>%
  dplyr::mutate(perc = (counts / sum(counts)) * 100) %>%
  dplyr::arrange(desc(perc))

#The result:
# Groups: gender [2]
#  gender pet    counts  perc
#  <fctr> <fctr>  <int> <dbl>
#1 female cat         3  75.0
#2 male   dog         2  66.7
#3 male   cat         1  33.3
#4 female dog         1  25.0
dplyr::分组依据(数据帧、性别、宠物)%>%
dplyr::汇总(计数=n())%>%
dplyr::mutate(perc=(计数/总和(计数))*100)%>%
dplyr::排列(描述(perc))
#结果是:
#团体:性别[2]
#性别宠物计数perc
#      
#1只母猫3 75.0
#2只公狗2 66.7
#3雄性1类33.3
#4只母狗125.0

使用dplyr编程的双向多重分组:-
途径1

f1%
汇总(计数=n())%>%
变异(perc=(计数/总和(计数))*100)%>%
排列(描述(perc))
}
f1(数据帧、性别、宠物)
结果1:

 # A tibble: 4 x 4
    # Groups:   gender [2]
      gender pet   counts  perc
      <fct>  <fct>  <int> <dbl>
    1 female cat        3  75.0
    2 male   dog        2  66.7
    3 male   cat        1  33.3
    4 female dog        1  25.0
#一个tible:4 x 4
#团体:性别[2]
性别宠物计数perc
1只母猫3 75.0
2只公狗2 66.7
3雄性1类33.3
4只母狗125.0
方式2:

f2<-function(df, grp_vars){
  df %>% 
    group_by(!!!grp_vars) %>% 
    summarize(counts= n()) %>% 
    mutate(perc = (counts/sum(counts))*100) %>% 
    arrange(desc(perc))
}
f2(dataframe, quos(gender,pet))
f2%
分组依据(!!!grp变量)%>%
汇总(计数=n())%>%
变异(perc=(计数/总和(计数))*100)%>%
排列(描述(perc))
}
f2(数据帧,quos(性别,宠物))
结果2:

# A tibble: 4 x 4
# Groups:   gender [2]
  gender pet   counts  perc
  <fct>  <fct>  <int> <dbl>
1 female cat        3  75.0
2 male   dog        2  66.7
3 male   cat        1  33.3
4 female dog        1  25.0
#一个tible:4 x 4
#团体:性别[2]
性别宠物计数perc
1只母猫3 75.0
2只公狗2 66.7
3雄性1类33.3
4只母狗125.0

您可以使用
groupby
而不使用引号或波浪号,即
groupby(性别,宠物)
我也尝试过。它仍然给了我同样的错误:
compat_lazy_dots(.dots,caller_env())中的错误:找不到对象“gender”
如果它在函数中,请使用
quos
f1%group\u by(!!!groups)%%>%..}
并调用
f1(数据帧,quos(性别,宠物))
我实际上用.dots输入了您的代码,但没有意识到您编写代码时没有点。对不起!
f2<-function(df, grp_vars){
  df %>% 
    group_by(!!!grp_vars) %>% 
    summarize(counts= n()) %>% 
    mutate(perc = (counts/sum(counts))*100) %>% 
    arrange(desc(perc))
}
f2(dataframe, quos(gender,pet))
# A tibble: 4 x 4
# Groups:   gender [2]
  gender pet   counts  perc
  <fct>  <fct>  <int> <dbl>
1 female cat        3  75.0
2 male   dog        2  66.7
3 male   cat        1  33.3
4 female dog        1  25.0