在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