我正在尝试用plyr
替换所有dplyr
次来电。仍然存在一些障碍,其中一个具有group_by
功能。我想它的行为与第二个ddply
参数的行为相同,并根据我列出的分组变量进行拆分,应用和组合。但事实似乎并非如此。这是一个相当简单的例子。
让我们定义一个愚蠢的函数
mm <- function(x) return(x[1:5, ])
现在我们可以像这样分割iris
数据集中的物种,并将此函数应用于每个部分。
ddply(iris, .(Species), mm)
这是按预期工作的。但是,当我使用dplyr
尝试相同时,它无法按预期工作。
iris %>% group_by(Species) %>% mm
我做错了什么?
答案 0 :(得分: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
更一般地说,要将自定义函数应用于dplyr
的组,您可以执行以下操作(感谢@docendodiscimus):
iris %>% group_by(Species) %>% do(mm(.))
答案 1 :(得分:0)
slice
已为此创建:
library(dplyr)
iris %>% group_by(Species) %>% slice(1:5)
#> # A tibble: 15 x 5
#> # Groups: Species [3]
#> Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#> <dbl> <dbl> <dbl> <dbl> <fct>
#> 1 5.1 3.5 1.4 0.2 setosa
#> 2 4.9 3 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 3.6 1.4 0.2 setosa
#> 6 7 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 1.3 versicolor
#> 10 6.5 2.8 4.6 1.5 versicolor
#> 11 6.3 3.3 6 2.5 virginica
#> 12 5.8 2.7 5.1 1.9 virginica
#> 13 7.1 3 5.9 2.1 virginica
#> 14 6.3 2.9 5.6 1.8 virginica
#> 15 6.5 3 5.8 2.2 virginica