我正试图用我的所有plyr
电话来取代dplyr
.还有一些障碍,其中一个是group_by
功能.我想它的行为方式与第二个ddply
参数相同,并根据我列出的分组变量进行拆分,应用和组合.但事实似乎并非如此.这是一个相当简单的例子.
让我们定义一个愚蠢的功能
mm <- function(x) return(x[1:5, ])
Run Code Online (Sandbox Code Playgroud)
现在我们可以iris
像这样分割数据集中的物种并将此函数应用于每个部分.
ddply(iris, .(Species), mm)
Run Code Online (Sandbox Code Playgroud)
这按预期工作.但是,当我尝试相同时dplyr
,它不能按预期工作.
iris %>% group_by(Species) %>% mm
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
jba*_*ums 35
如图所示?do
,您可以.
在表达式中引用一个组.以下将复制您的ddply
输出:
iris %>% group_by(Species) %>% do(.[1:5, ])
# Source: local data frame [15 x 5]
# Groups: Species
#
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1 5.1 3.5 1.4 0.2 setosa
# 2 4.9 3.0 1.4 0.2 setosa
# 3 4.7 3.2 1.3 0.2 setosa
# 4 4.6 3.1 1.5 0.2 setosa
# 5 5.0 3.6 1.4 0.2 setosa
# 6 7.0 3.2 4.7 1.4 versicolor
# 7 6.4 3.2 4.5 1.5 versicolor
# 8 6.9 3.1 4.9 1.5 versicolor
# 9 5.5 2.3 4.0 1.3 versicolor
# 10 6.5 2.8 4.6 1.5 versicolor
# 11 6.3 3.3 6.0 2.5 virginica
# 12 5.8 2.7 5.1 1.9 virginica
# 13 7.1 3.0 5.9 2.1 virginica
# 14 6.3 2.9 5.6 1.8 virginica
# 15 6.5 3.0 5.8 2.2 virginica
Run Code Online (Sandbox Code Playgroud)
更一般地说,要将自定义函数应用于组dplyr
,您可以执行以下操作(感谢@docendodiscimus):
iris %>% group_by(Species) %>% do(mm(.))
Run Code Online (Sandbox Code Playgroud)