如何使用dplyr在函数中按多个值分组
我想知道如何修改下面的代码如何使用dplyr在函数中按多个值分组,r,R,我想知道如何修改下面的代码 xxx<-function(df,groupbys){ groupbys<-enquo(groupbys) df%>%group_by_(groupbys)%>%summarise(count=n()) } zzz<-xxx(iris,Species) xxx%摘要(计数=n() } zzz当使用enquo(单参数)或enquos(多参数)时,您应该使用和运算符 xxx% 计数()%>% 解组() } mtcars%>
xxx<-function(df,groupbys){
groupbys<-enquo(groupbys)
df%>%group_by_(groupbys)%>%summarise(count=n())
}
zzz<-xxx(iris,Species)
xxx%摘要(计数=n()
}
zzz当使用enquo
(单参数)或enquos
(多参数)时,您应该使用代码>和代码>运算符
xxx%
计数()%>%
解组()
}
mtcars%>%xxx(共青团,上午)
##tibble:6 x 3
#共青团
#
# 1 4 0 3
# 2 4 1 8
# 3 6 0 4
# 4 6 1 3
# 5 8 0 12
# 6 8 1 2
或者,如果您想在函数formals中为一个或多个列名保留一个参数,我认为您需要在调用中使用vars()
。(也许在小插曲中还有其他建议。)
xxx%
分组依据(!!!组)%>%
计数()%>%
解组()
}
xxx(mtcars、vars(气缸、am))
使用enquo
(单参数)或enquos
(多参数)时,应使用代码>和代码>运算符
xxx%
计数()%>%
解组()
}
mtcars%>%xxx(共青团,上午)
##tibble:6 x 3
#共青团
#
# 1 4 0 3
# 2 4 1 8
# 3 6 0 4
# 4 6 1 3
# 5 8 0 12
# 6 8 1 2
或者,如果您想在函数formals中为一个或多个列名保留一个参数,我认为您需要在调用中使用vars()
。(也许在小插曲中还有其他建议。)
xxx%
分组依据(!!!组)%>%
计数()%>%
解组()
}
xxx(mtcars、vars(气缸、am))
在这一点上,您只需在groupby
函数中使用.dots
参数即可。只需确保groupby
是一个字符。即
xxx<-function(df,groupbys){
df%>%group_by(.dots = groupbys)%>%summarise(count=n())
}
xxx(iris,"Species")
# A tibble: 3 x 2
Species count
<fct> <int>
1 setosa 50
2 versicolor 50
3 virginica 50
xxx(iris,c("Species","Petal.Length"))
# A tibble: 48 x 3
# Groups: Species [3]
Species Petal.Length count
<fct> <dbl> <int>
1 setosa 1 1
2 setosa 1.1 1
3 setosa 1.2 2
4 setosa 1.3 7
5 setosa 1.4 13
6 setosa 1.5 13
7 setosa 1.6 7
8 setosa 1.7 4
9 setosa 1.9 2
10 versicolor 3 1
xxx%groupby(.dots=groupby)%>%summary(count=n())
}
xxx(鸢尾属,“物种”)
#一个tibble:3x2
物种计数
1刚毛50
2彩色50
3弗吉尼亚州50
xxx(鸢尾,c(“种类”,“花瓣长度”))
#A tibble:48 x 3
#类群:种[3]
种花瓣。长度计数
1刚毛11
2刚毛1.1 1
3刚毛1.2 2
4刚毛1.3 7
5刚毛1.4 13
6刚毛1.5 13
7刚毛1.6 7
8.1.7 4
9刚毛1.9 2
10彩色3 1
在这一点上,您只需在groupby
函数中使用.dots
参数即可。只需确保groupby
是一个字符。即
xxx<-function(df,groupbys){
df%>%group_by(.dots = groupbys)%>%summarise(count=n())
}
xxx(iris,"Species")
# A tibble: 3 x 2
Species count
<fct> <int>
1 setosa 50
2 versicolor 50
3 virginica 50
xxx(iris,c("Species","Petal.Length"))
# A tibble: 48 x 3
# Groups: Species [3]
Species Petal.Length count
<fct> <dbl> <int>
1 setosa 1 1
2 setosa 1.1 1
3 setosa 1.2 2
4 setosa 1.3 7
5 setosa 1.4 13
6 setosa 1.5 13
7 setosa 1.6 7
8 setosa 1.7 4
9 setosa 1.9 2
10 versicolor 3 1
xxx%groupby(.dots=groupby)%>%summary(count=n())
}
xxx(鸢尾属,“物种”)
#一个tibble:3x2
物种计数
1刚毛50
2彩色50
3弗吉尼亚州50
xxx(鸢尾,c(“种类”,“花瓣长度”))
#A tibble:48 x 3
#类群:种[3]
种花瓣。长度计数
1刚毛11
2刚毛1.1 1
3刚毛1.2 2
4刚毛1.3 7
5刚毛1.4 13
6刚毛1.5 13
7刚毛1.6 7
8.1.7 4
9刚毛1.9 2
10彩色3 1
这里有两种解决问题的方法。如果要将列名作为不带引号的变量传递,可以使用..
并在count
中使用它,而不是在groupby
+summary
中使用它
xxx<-function(df,...){
df %>% count(...)
}
xxx(mtcars, cyl)
# A tibble: 3 x 2
# cyl n
# <dbl> <int>
#1 4 11
#2 6 7
#3 8 14
xxx(mtcars, cyl, am)
# A tibble: 6 x 3
# cyl am n
# <dbl> <dbl> <int>
#1 4 0 3
#2 4 1 8
#3 6 0 4
#4 6 1 3
#5 8 0 12
#6 8 1 2
这里有两种解决这个问题的方法。如果要将列名作为不带引号的变量传递,可以使用..
并在count
中使用它,而不是在groupby
+summary
中使用它
xxx<-function(df,...){
df %>% count(...)
}
xxx(mtcars, cyl)
# A tibble: 3 x 2
# cyl n
# <dbl> <int>
#1 4 11
#2 6 7
#3 8 14
xxx(mtcars, cyl, am)
# A tibble: 6 x 3
# cyl am n
# <dbl> <dbl> <int>
#1 4 0 3
#2 4 1 8
#3 6 0 4
#4 6 1 3
#5 8 0 12
#6 8 1 2
你应该看看vignette(“编程”)
,它在那里有介绍。xiahfyj,如果其中一个答案解决了你的问题,请;这样做不仅给回答者提供了一些观点,也为有类似问题的读者提供了一些结尾。虽然你只能接受一个答案,但你可以选择增加你认为有帮助的选票。(如果仍然存在问题,您可能需要编辑您的问题并提供更多详细信息。)您应该查看vignette(“编程”)
,这里有介绍。xiahfyj,如果其中一个答案解决了您的问题,请;这样做不仅给回答者提供了一些观点,也为有类似问题的读者提供了一些结尾。虽然你只能接受一个答案,但你可以选择增加你认为有帮助的选票。(如果仍然存在问题,您可能需要编辑问题并提供更多详细信息。)